python_day22_Django-6 (form)

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})

python_day22_Django-6 (form)

使用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()
python_day22_Django-6 (form)
加上widget=forms.widgets.PasswordInput()
python_day22_Django-6 (form)

增加类

    pwd = forms.CharField(
        label="密码",
        min_length=6,
        error_messages={
            "required": "不能为空",
            "invalid": "格式错误",
            "min_length": "最少6位",
        },
        widget=forms.widgets.PasswordInput(
            attrs={"class":"ap1"}
        )
    )

python_day22_Django-6 (form)

1.3选择框

choices 单选框

    hobby221 = forms.ChoiceField(
        choices=((1,"吃饭"), (2,"睡觉"),(3,"做梦"),),
        label="爱好",
        initial=1,
        widget=forms.widgets.Select()
    )

python_day22_Django-6 (form)

MultipleChoiceField 多选框

    hobby2 = forms.MultipleChoiceField(
        choices=((1, "吃饭"), (2, "睡觉"), (3, "做梦"),),
        label="多选爱好",
        initial=3,    # 初始化选择框
        widget=forms.widgets.SelectMultiple()
    )

python_day22_Django-6 (form)

单选CheckboxInput

    keep = forms.ChoiceField(
        label="是否记住密码",
        initial="checked",
        widget=forms.widgets.CheckboxInput()
    )

python_day22_Django-6 (form)

多选框 CheckboxSelectMultiple

    keep2 = forms.MultipleChoiceField(
        choices=((1, "吃饭"), (2, "睡觉"), (3, "做梦"),),
        label="多选爱好",
        initial="checked",    # 初始化选择框
        widget=forms.widgets.CheckboxSelectMultiple()
    )

css中可以直接去掉li的点

python_day22_Django-6 (form)

猜你喜欢

转载自blog.51cto.com/xiong51/2300185
今日推荐