首页 > 其他分享 >3 基于forms组件 & ajax实现注册功能 & 头像预览功能

3 基于forms组件 & ajax实现注册功能 & 头像预览功能

时间:2022-08-16 16:34:45浏览次数:45  
标签:src 预览 form label forms ajax attrs class

1 基于forms组件设计注册页面

image

register.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'blog/bootstrap/css/bootstrap.css' %}">
    <style>
        #avatar_img {
            margin-left: 20px;
        }
        #avatar {
            display: none
        }
    </style>
</head>
<body>


<div class="container">
    <div class="row">
        <div class="col-md-6 col-lg-offset-3">
            <h3>注册页面</h3>
            <form>
                {% csrf_token %}

                {% for filed in form %}
                    <div class="form-group">
                        <label for="{{ filed.auto_id }}">{{ filed.label }}</label>
                        {{ filed }}
                    </div>
                {% endfor %}

                <div class="form-group">
                    <label for="avatar">
                        头像
                        <img id="avatar_img" src="{% static 'blog/img/default.png' %}" width="50">
                    </label>

                    <input type="file" id="avatar">
                </div>

                <input type="button" class="btn btn-default login_btn pull-right" value="登录">
            </form>
        </div>
    </div>
</div>

</body>
</html>
views.py
from django import forms


class UserForm(forms.Form):
    user = forms.CharField(
        max_length=32,
        label='用户名',
        widget=forms.widgets.TextInput(attrs={'class': 'form-control'})
    )
    pwd = forms.CharField(
        max_length=32,
        label='密码',
        widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'})
    )
    re_pwd = forms.CharField(
        max_length=32,
        label='确认密码',
        widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'})
    )
    email = forms.EmailField(
        label='邮箱',
        widget=forms.widgets.EmailInput(attrs={'class': 'form-control'})
    )


def register(request):
    form = UserForm()

    return render(request, 'register.html', {'form': form})

2 实现点击预览头像

实现思路:
1.获取用户选中文件的对象
2.获取文件对象的路径
3.修改img的src路径,src=文件对象的路径

基于以上register.html,编写javascript代码

<script src="{% static 'blog/js/jquery-3.6.0.min.js' %}"></script>
<script>
    // change状态改变后生效
    $("#avatar").change(function () {
        // 1.获取用户选中的文件对象
        var file_obj = $(this)[0].files[0];
        // 2.获取文件对象的路径
        var reader = new FileReader();
        reader.readAsDataURL(file_obj);  // 异步的
        reader.onload = function () {
            // 3.修改img的src路径,src=文件对象的路径
            $('#avatar_img').attr('src', reader.result)
        } // onl oad同步,会等待异步代码执行完,在执行
    })
</script>

标签:src,预览,form,label,forms,ajax,attrs,class
From: https://www.cnblogs.com/it-lkp/p/16580875.html

相关文章

  • Javaweb08-Ajax项目-分页条件查询 + 增删改
    1、登录1.1登录form表单<formaction="<%=request.getContextPath()%>/loginAnime"method="get"><tableborder="1px"align="center"width="40%"cellspacing="......
  • python爬取ajax
    importrequestsurl='https://api.bilibili.com/x/v2/reply/main?csrf=056718067a9e03b351569ee0294e4a1e&mode=3&next=2&oid=813963991&plat=1&type=1'header={......
  • 14 Django_forms组件之ChoiceField类型
    如果想要灵活应用ChoiceField,那么请看如下:classTransactionRecord(ActiveBaseModel):"""交易记录"""charge_type_class_mapping={1:"success",......
  • 最普通的ajax交互
    本文主要是介绍前后端数据交互的方法。现在在软件开发的设计中大多采用前后端分离的方法,那就不可避免出现前后端数据交互的问题。同时我们在上网的过程中所使用的浏览器为......
  • .NET 7 发布的最后一个预览版Preview 7, 下个月发布RC
    微软在2022年8月9日发布了.NET7Preview7[1],这是它在11月10日RTM之前进入发布候选阶段之前的最后预览版。预览版7已在VisualStudio17.4预览版1中进行了测试,......
  • Ajax
    9、Ajax9.1、简介AJAX=AsynchronousJavaScriptandXML(异步的JavaScript和XML)。AJAX是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。Ajax不是......
  • AJAX
    Ajax原理Ajax的原理简单来说是在用户和服务器之间加了—个中间层(AJAX引擎),通过 XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript 来......
  • Passing data between two Forms in WinForms(二)
    话题#1:可重用性这种方法的第一个话题就是可重用性。想像一下在下个星期,你想要从另一个Form中使用Form2,比如说是Form3。你想要收集相同的数据,但希望以不同的方式呈现。现在......