注册页面-使用form模块搭建
基于Django的form模块,快速的搭建注册页面,每个限制条件,都放在form模块里面,不单独对每一项编写标签,使用模版的 for 循环来渲染。
- 首先设置form模块
在blogs模块下创建一个blogs_form.py文件
注意一点,需要引用django模块下的forms模块,还有widgets模块,widget是设置input的类型,比如TextInput文本框,PasswordInput密码框,EmailInput邮箱框等等,这些好处就不用对其做判断,是否符合邮箱的匹配条件,forms模块就帮忙做了。
attrs:添加input的属性和属性值,key-value 形式,我想在class添加form-control(Bootstrap的样式),使用 attrs={"class","form-control"}
1 from django import forms 2 from django.forms import widgets 3 4 class UserForm(forms.Form): 5 user = forms.CharField(max_length=32, 6 label="用户名", 7 widget=widgets.TextInput(attrs={"class": "form-control"})) 8 pwd = forms.CharField(max_length=32, 9 label="密码", 10 widget=widgets.PasswordInput(attrs={"class": "form-control"})) 11 re_pwd = forms.CharField(max_length=32, 12 label="确认密码", 13 widget=widgets.PasswordInput(attrs={"class": "form-control"})) 14 email = forms.EmailField(max_length=32, 15 label="邮箱", 16 widget=widgets.EmailInput(attrs={"class": "form-control"}))
- view视图添加注册
创建forms对象,直接返回。
记得引入刚刚写的UserForm到view中。
from .blog_form import UserForm def register(request): form = UserForm() return render(request, "register.html", locals())
- urls路由中添加路径
添加路径,将url路径和view中的register函数,关联起来。
path("register/", views.register)
- 重头戏,写register.html
首先,使用Bootstrap将布局搭建好,把<form>标签中的位置空出来
记得在form标签中,写 csrf_token 解决跨站问题
循环 UserForm对象, 每次拿到一个filed对象
filed.name:对象的label名
filed.label:对象的label
filed: input标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css"> <script src="/static/js/jquery-3.4.1.js" type="text/javascript"></script> <style type="text/css"> </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="id_{{ filed.name }}">{{ filed.label }}</label> {{ filed }} </div> {% endfor %} </form> </div> </div> </div> <script type="text/javascript"> </script> </body> </html>