小白个人博客---注册功能实现
注册功能就是要将正确的用户信息写入数据库,正确即需要验证。
先写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>



浙公网安备 33010602011771号