form介绍
form主要功能: 页面可用的HTML标签,对用户提交的数据进行校验,保留上次输入内容
普通注册
1、html页面
reg.html
<form action="/reg/" method="post" novalidate>
{% csrf_token %}
<div>
用户名: <input type="text" name="username">
</div>
<div>
密码: <input type="password" name="pwd">
<span>{{ error.pwd }}</span>
</div>
<input type="submit" value="提交">
</form>
2、urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('reg/', views.register),
]
3、views.py
def register(request):
error_msg = {"pwd": "", "username": ""}
if request.method == "POST":
username = request.POST.get("username")
pwd = request.POST.get("pwd")
if len(pwd) < 6:
error_msg["pwd"] = "长度不能小于6"
return render(request, "reg.html", {"error": error_msg})
使用form注册
1、html页面
<form action="/regs2/" method="post" novalidate>
{% csrf_token %}
{{ form_obj.as_p }} {# 生成html页面 #}
{{ form_obj.errors.pwd }} {# 打印错误提示 #}
<input type="submit" value="提交">
</form>
2、 urls.py与 普通注册的一样
3、views.py
from app01 import formd
def register2(request):
form_obj = formd.RgeForm()
if request.method == "POST":
form_obj = formd.RgeForm(request.POST) # django自动生成的 html页面
print(form_obj)
#<tr><th><label for="id_name">用户名:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="name" maxlength="16" required id="id_name" /></td></tr>
return render(request, "reg2.html", {"form_obj": form_obj})
4、formd.py
在项目中创建一个formd.py文件
from django import forms # 引用forms模块
# 创建注册函数
class RgeForm(forms.Form):
name = forms.CharField(
label="用户名",
max_length=16, # 最大长度以及错误提示
error_messages={
"max_length": "最大长度16"
}
)
pwd = forms.CharField(
label="密码",
min_length=6,
error_messages={
"required": "不能为空",
"invalid": "格式错误",
"min_length": "最少6位",
}
)
form的功能: 来源: https://www.cnblogs.com/liwenzhou/p/8747872.html
• 前端页面是form类的对象生成的 -->生成HTML标签功能
• 当用户名和密码输入为空或输错之后 页面都会提示 -->用户提交校验功能
• 当用户输错之后 再次输入 上次的内容还保留在input框 -->保留上次输入内容
1.1、error_messages
错误重写
error_messages={
"required": "不能为空", # 当请求为空时提示
"invalid": "格式错误", # 格式错误
"min_length": "最少6位", # 最小长度
"max_length":" 最大N位" # 最大长度
}
1.2、password
pwd = forms.CharField(
label="密码",
min_length=6,
error_messages={
"required": "不能为空",
"invalid": "格式错误",
"min_length": "最少6位",
},
# widget=forms.widgets.PasswordInput() # 插件widgets
)
不加 widget=forms.widgets.PasswordInput()
加上widget=forms.widgets.PasswordInput()
增加类
pwd = forms.CharField(
label="密码",
min_length=6,
error_messages={
"required": "不能为空",
"invalid": "格式错误",
"min_length": "最少6位",
},
widget=forms.widgets.PasswordInput(
attrs={"class":"ap1"}
)
)
1.3选择框
choices 单选框
hobby221 = forms.ChoiceField(
choices=((1,"吃饭"), (2,"睡觉"),(3,"做梦"),),
label="爱好",
initial=1,
widget=forms.widgets.Select()
)
MultipleChoiceField 多选框
hobby2 = forms.MultipleChoiceField(
choices=((1, "吃饭"), (2, "睡觉"), (3, "做梦"),),
label="多选爱好",
initial=3, # 初始化选择框
widget=forms.widgets.SelectMultiple()
)
单选CheckboxInput
keep = forms.ChoiceField(
label="是否记住密码",
initial="checked",
widget=forms.widgets.CheckboxInput()
)
多选框 CheckboxSelectMultiple
keep2 = forms.MultipleChoiceField(
choices=((1, "吃饭"), (2, "睡觉"), (3, "做梦"),),
label="多选爱好",
initial="checked", # 初始化选择框
widget=forms.widgets.CheckboxSelectMultiple()
)
css中可以直接去掉li的点