小白个人博客---注册功能实现

注册功能就是要将正确的用户信息写入数据库,正确即需要验证。

先写form验证:

class RegisterForm(Form):
    username = fields.CharField(
        min_length=3,
        max_length=20,
        required=True,
        widget=widgets.TextInput(attrs={"class":"form-control"}),
        error_messages={"required": "用户名不能为空", "max_length": "太长", "min_length": "太短了"}
    )
    password1 = fields.RegexField(
        '^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%\^\&\*\(\)])[0-9a-zA-Z!@#$\%\^\&\*\(\)]{8,32}$',
        min_length=6,
        max_length=32,
        widget=widgets.PasswordInput(attrs={"class": "form-control"}),
        error_messages={
            'required': "密码不能为空",
            "invalid": "密码必须包含数字,字母、特殊字符",
            "min_length": "太短了",
            "max_length": "太长了",
        }
    )
    password2 = fields.RegexField(
        '^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%\^\&\*\(\)])[0-9a-zA-Z!@#$\%\^\&\*\(\)]{8,32}$',
        min_length=6,
        max_length=32,
        widget=widgets.PasswordInput(attrs={"class": "form-control"}),
        error_messages={
            'required': "密码不能为空",
            "invalid": "密码必须包含数字,字母、特殊字符",
            "min_length": "太短了",
            "max_length": "太长了",
        }
    )
    nickname = fields.CharField(required=True,
                                widget=widgets.TextInput(attrs={"class":"form-control"}),
                                error_messages={"required": "不嫩为空"})
    email = fields.EmailField(required=True,
                              widget=widgets.EmailInput(attrs={"class":"form-control"}),
                              error_messages={"required": "不嫩为空", "invalid": "邮箱格式错误"})
    avatar = fields.ImageField(required=True,
                               widget=widgets.FileInput(),
                               error_messages={"required": "不嫩为空", "invalid": "图片格式错误"})

    def clean(self):                       #clean 执行时,代表已经完成了上面的单项验证,此时可以获取所有提交的数据
        v1 = self.cleaned_data.get("password1")
        v2 = self.cleaned_data.get("password2")
        if v1 == v2:
            pass
        else:
            raise ValidationError("密码输入不一致")       #判断二次密码是否相等

views:

def register(request):
    if request.method == "GET":
        form_obj=RegisterForm()  #初始化form表单
        return render(request,"register.html",{"form":form_obj})

    elif request.method == "POST":
        form_obj = RegisterForm(request.POST, request.FILES)
        if form_obj.is_valid():
            username = form_obj.cleaned_data.get("username")
            password = form_obj.cleaned_data.get("password1")
            # password2=form_obj.cleaned_data.get("password2")
            nickname = form_obj.cleaned_data.get("nickname")
            email = form_obj.cleaned_data.get("email")
            avatar = form_obj.cleaned_data.get("avatar")
            user_dict = {"username": username,
                         "password": password,
                         "nickname": nickname,
                         "email": email,
                         "avatar": avatar}
            print(user_dict)
            try:
                models.UserInfo.objects.create(**user_dict)
            except Exception as e:
                print(e)          
            return redirect("/login.html")      #验证成功跳转登录
        else:          

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


html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css">
    <link rel="stylesheet" href="/static/plugins/font-awesome/css/font-awesome.css">
    <link rel="stylesheet" href="/static/css/row-avatar.css">

    <script type="text/javascript" src="/static/js/jquery-1.12.4.js"></script>
    <script type="text/javascript" src="/static/plugins/bootstrap/js/bootstrap.js"></script>
</head>
<body>
<form class="form-horizontal" action="/register.html" method="post" enctype="multipart/form-data" novalidate>  #防止浏览器自己验证
    <div class="form-group">
        <label for="username" class="col-sm-2 control-label">用户名:</label>
        <div class="col-sm-4">
            {{ form.username }}
            <span style="color: red;">{{ form.username.errors.0 }}</span>
        </div>

    </div>

    <div class="form-group">
        <label for="inputPassword1" class="col-sm-2 control-label">密码:</label>
        <div class="col-sm-4">
            {{ form.password1 }}
            <span  style="color: red;">{{ form.password1.errors.0 }}</span>
        </div>
    </div>

    <div class="form-group">
        <label for="inputPassword2" class="col-sm-2 control-label">确认密码:</label>
        <div class="col-sm-4">
            {{ form.password2 }}
            <span  style="color: red;">{{ form.non_field_errors }}</span>  #def clean 验证错误的信息



</div> </div> <div class="form-group"> <label for="inputNickname" class="col-sm-2 control-label">昵称:</label> <div class="col-sm-4"> {{ form.nickname }} <span style="color: red;">{{ form.nickname.errors.0 }}</span> </div> </div> <div class="form-group"> <label for="inputEmail" class="col-sm-2 control-label">邮箱</label> <div class="col-sm-4"> {{ form.email }} <span style="color: red;">{{ form.email.errors.0 }}</span> </div> </div> <div class="form-group"> <label for="inputImg" class="col-sm-2 control-label">上传头像</label> <div class="col-sm-4"> {{ form.avatar }} <span style="color: red;">{{ form.avatar.errors.0 }}</span> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">提交</button> </div> </div> </form> </body> </html>

 

 

 

posted @ 2018-09-28 14:07  986428528  阅读(113)  评论(0)    收藏  举报