zoukankan      html  css  js  c++  java
  • 用户注册

    1、首先实现一个注册页面

    用户注册需要用到form主键进行验证

    views.py

    from django.shortcuts import HttpResponse,render,redirect
    from django.http import JsonResponse
    from django.contrib import auth
    from blog.Myforms import UserForm
    from blog.models import *
    
    
    
    
    def register(request):
        if request.is_ajax():
            form_ = UserForm(request.POST) #对用户的信息进行过滤
            data = {"user":None,"msg":None}
    
            if form_.is_valid():  #如果用户注册输入的信息全部符合规定则返回True
                print(form_.cleaned_data)  #所有的干净的信息都在form.cleaned_data中
                data["user"] = form_.cleaned_data.get("user")
                user = form_.cleaned_data.get("user")
                pwd = form_.cleaned_data.get("pwd")
                email = form_.cleaned_data.get("email")
                avatar_obj = request.FILES.get("avatars") #判断用户是否上传头像,没有则设置默认头像
                if avatar_obj:
                    user_obj = UserInfo.objects.create_user(username=user,password=pwd,email=email,avatar=avatar_obj)
                else:
                    user_obj = UserInfo.objects.create_user(username=user, password=pwd, email=email)
            else:
    
                 #没有通过的错误信息会存放在form.error中
                print(form_.cleaned_data)
                print(form_.errors)
                data["msg"] = form_.errors
    
    
            return JsonResponse(data)
    
        form = UserForm()  #get请求时生成form组件对象,返回给页面,使用模板语法
    
        return render(request,"register.html",{"form":form})    
    

      

    创建Myforms.py文件

    from django.core.exceptions import  ValidationError
    from django import forms
    from django.forms import widgets
    from blog.models import UserInfo
    
    
    
    w1 = widgets.TextInput(attrs={"class":"form-control"},)
    w2 = widgets.PasswordInput(attrs={"class":"form-control"},)
    w3 = widgets.EmailInput(attrs={"class":"form-control"},)
    
    
    class UserForm(forms.Form):
        #对输入的用户信息进行过滤
        user = forms.CharField(max_length=32,label="用户名",widget=w1)
        pwd = forms.CharField(max_length=16,label="密码",widget=w2)
        r_pwd = forms.CharField(max_length=16,label="确认密码",widget=w2)
        email = forms.EmailField(label="邮箱",widget=w3)
    
    
        def clean_name(self):
         #使用钩子对用户输入信息,进行自定义方法的验证
            user = self.cleaned_data.get("user")
            user_obj = UserInfo.objects.filter(username=user)
    
            if not user_obj:
                return user
            else:
                raise ValidationError("用户名已注册")
    
        def clean(self):
    
            pwd = self.cleaned_data.get("pwd")
            r_pwd = self.cleaned_data.get("r_pwd")
    
            if pwd and r_pwd:
                if pwd == r_pwd:
                    return self.cleaned_data
                else:
                    raise ValidationError("两次密码不一致")
            else:
                return self.cleaned_data
    

      

    register.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
        <link rel="stylesheet" type="text/css" href="/static/blog/bs/css/bootstrap.css">
        <style type="text/css">
    
            #avatars {
                 60px;
                height: 60px;
                margin-left: 15px;
            }
    
            #file_up {
                display: none;
            }
    
            .error {
                color: red;
            }
    
        </style>
    
    </head>
    
    
    <body>
    
    <h3>注册页面</h3>
    
    <div class="container">
        <div class="row">
            <div class="col-md-6 col-lg-offset-3">
               
                <form id="form">
        
                    {% csrf_token %}
                    {% for foo in form %}
                        <div class="form-group">
                            <label for="{{ foo.auto_id }}">{{ foo.label }}</label>
                            {{ foo }}<span class="pull-right error"></span>
                        </div>
                    {% endfor %}
    
                    <div class="form-group">
    
                        <label for="file_up">头像<img src="/media/avatars/default.png" id="avatars" alt="用户头像"></label>
                        <input type="file" id="file_up">
    
                    </div>
    
                    <input type="button" value="submit" class="btn btn-default" id="regBtn">
    
                </form>
    
            </div>
        </div>
    
    
    </div>
    
    
    </body>
    
    
    <script src="/static/js/jquery-3.3.1.min.js"></script>
    
    <script type="text/javascript">
    
        $(function () {
            $("#file_up").change(function () {
                //获取选中头像
                var file_obj = $(this)[0].files[0];
                //获取选中头像的路径
                var reader = new FileReader();
                reader.readAsDataURL(file_obj);
                reader.onload = function () {
                    $("#avatars").attr("src", reader.result)
                }
    
            });
            $("#regBtn").click(function () {
                var requestData = $("#form").serializeArray();
                console.log(requestData);
                var formdata = new FormData();
    
                $.each(requestData, function (index, ele) {
                    console.log(ele.name);
                    formdata.append(ele.name, ele.value)
                });
                formdata.append("avatars", $("#file_up")[0].files[0]);
    
                {#           formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val());#}
                {#            formdata.append("user",$("#id_user").val());#}
                {#            formdata.append("pwd",$("#id_pwd").val());#}
                {#            formdata.append("r_pwd",$("#id_r_pwd").val());#}
                {#            formdata.append("email",$("#id_email").val());#}
    
    
                $.ajax({
                    url: "",
                    type: "post",
                    contentType: false,
                    processData: false,
                    data: formdata,
                    success: function (data) {
                        console.log(data);
                        if (data.user) {
                            console.log(123)
                        }
                        else {
                            //清空错误信息
                            $(".error").html("");
                            $(".form-group").removeClass("has-error");
                            $.each(data.msg, function (k, v) {
                                if (k === "__all__") {
                                    $("#id_r_pwd").next().html(v).parent().addClass("has-error")
                                }
                                else {
                                    $("#id_" + k).next().html(v).parent().addClass("has-error");
    
                                }
    
                            })
                        }
                    }
                })
            })
        })
    
    </script>
    
    
    </html>
    

      

  • 相关阅读:
    HDU5418.Victor and World(状压DP)
    POJ2686 Traveling by Stagecoach(状压DP)
    POJ3254Corn Fields(状压DP)
    HDU5407.CRB and Candies(数论)
    CodeForces 352D. Jeff and Furik
    CodeForces 352C. Jeff and Rounding(贪心)
    LightOj 1282 Leading and Trailing
    Ural 1057. Amount of Degrees(数位DP)
    HDU 2089 不要62 (数位DP)
    HDU5366 The mook jong (DP)
  • 原文地址:https://www.cnblogs.com/zzhhtt/p/9202027.html
Copyright © 2011-2022 走看看