• 注册功能


    BBS注册功能

    前端代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        {% load static %}
        <script src="{% static 'bootstrap/js/jquery.js' %}"></script>
        <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}">
        <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
    
    </head>
    <body>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <h2 class="text-center">注册</h2>
                <form id="myform" novalidate>
                    {% csrf_token %}  #为了通过中间件校验
                    {% for foo in form_obj %} 对后端传来的form组件的列表进行循环
                        <div class="form-group">
                            <label for="{{ foo.auto_id }}">{{ foo.label }}</label> #for是用来和input绑定的, foo里面有label属性
                            {{ foo }} #是一个个input框,有id属性的
                            <span style="color: red" class="pull-right"></span>
                        </div>
                    {% endfor %}
                    <div class="form-group">
                        <label for="myfile">头像
                            <img src="/static/img/default.png" alt="" width="80" style="margin-left: 10px" id="myimg">
                        </label>
                        <input type="file" id="myfile" name="avatar" style="display: none">
                    </div>
                    <input type="button" class="btn btn-success pull-right" value="注册" id="commit">
                </form>
            </div>
        </div>
    </div>
    <script>
        //当标签的src发生了变化的时候,就变化。
       $('#myfile').change(function () {
            // 文件阅读器
            //1 产生一个文件阅读器对象
            var fileReader = new FileReader();
            //2 获取用户上传的文件
            var fileObj = $(this)[0].files[0];
            //3 让文件阅读器读取该文件
            fileReader.readAsDataURL(fileObj);  // 这一步是异步 提交完之后直接运行下一行
            //4 利用文件阅读器将文件展示出来
            fileReader.onload = function () {
                $('#myimg').attr('src', fileReader.result)
            }
        });
    	//点击事件,用FormData对象来传键值对和文件
        $('#commit').click(function () {
            var formDataObj = new FormData();
            //在前面的form组件传来的对象外层用了一个 form 表单,这时候就有用处了,可以通过serializeArray()自动获取到内部所有的普通键值对
            $.each($('#myform').serializeArray(),function (index,obj) {
                formDataObj.append(obj.name,obj.value);
            });
            //把文件内容放进去了。
            formDataObj.append('avatar',$('#myfile')[0].files[0]);
    
    		//通过ajax来传送
            $.ajax({
                url:'',
                type:'post',
                //把上面的FormData对象放进去
                data:formDataObj,
                //必要的两个参数
                contentType:false,
                processData:false,
                success:function (data) {
                    if (data.code == 1000){
                        window.location.href = data.url
                    }else {
                        //后端传来的错误信息正好加一个id_就是前面input框的id
                        $.each(data.msg,function (index,obj) {
                            var targetId = '#id_'+ index;
                            $(targetId).next().text(obj[0]).parent().addClass('has-error')
                        })
                    }
                }
            })
        });
        $('input').focus(function () {
            $(this).next().text('').parent().removeClass('has-error')
        })
    </script>
    </body>
    </html>
    

    后端代码:

    def register(request):
        form_obj = myforms.MyRegForm()
        if request.method == 'POST':
            back_dic = {'code':1000,'msg':''}
            form_obj = myforms.MyRegForm(request.POST)#这里的form_obj名字一定要和上面的一样,虽然是两个对象,但是前段解析的时候用的是同一个名字。
            if form_obj.is_valid():#如果数据没有问题的话
                clean_data = form_obj.cleaned_data
                clean_data.pop('confirm_password')
                file_obj = request.FILES.get('avater')
    
                if file_obj:# 获取用户上传到头像之后 一定要做判断 判断用户是否上传了  如果没有上传  字典中就不加avatar键值对
                    clean_data['avatar'] = file_obj
    
                models.UserInfo.objects.create_user(**clean_data)
                back_dic['url'] = '/login' #直接跳转到登录界面
            else:
                back_dic['code'] = 2000
                back_dic['msg'] = form_obj.errors #把错误的信息的键值对全放进去
            return JsonResponse(back_dic) #通过序列化,返回前端ajax的success
        return render(request,'register.html',locals())
    
  • 相关阅读:
    HDUOJ 1397(素数筛选法)
    HDUOJ 2045 LELE的RPG难题
    HDUOJ 2018
    HDUOJ 2031
    HDUOJ 2050
    括号配对问题
    HDOJ 1102 Constructing Roads(最小生成树)
    HDOJ Prime Ring Problem (深度优先搜索)
    HDUOJ 1233 还是畅通工程(最小生成树基础)
    邻接表(转)
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11845500.html
Copyright © 2020-2023  润新知