Form 书写方式 验证用户请求 生成html标签 主机管理系统

Form

用途

  1. 验证用户请求
  2. 生成html标签
    • 保留上一次提交的数据

书写方式

  1. 写类
  2. 在类中写字段(校验)
  3. 在类中写插件(生成HTML),html上写模板语言
  4. 在函数中,配置初始化操作

验证用户请求

views.py

from django import forms
# 字段本身仅能验证
from django.forms import fields
# 定制插件、定制样式
from django.forms import widgets


class FM(forms.Form):
    user = fields.CharField(
        error_messages={'required': '用户名不能为空.'},
        widget=widgets.Textarea(attrs={'class': 'c1'}),
        label='用户名',
        initial='root'
    )
    pwd = fields.CharField(
        max_length=12,
        min_length=6,
        error_messages={'required': '密码不能为空.', 'min_length': '密码长度不能小于6',
                        "max_length": '密码长度不能大于12'},
        widget=widgets.PasswordInput
    )
    email = fields.EmailField(
        error_messages={'required': '邮箱不能为空.', 'invalid': "邮箱格式错误"})

    f = fields.FileField()

    p = fields.FilePathField(path='app01')

    city1 = fields.ChoiceField(
        choices=[(0, '上海'), (1, '广州'), (2, '东莞')]
    )
    city2 = fields.MultipleChoiceField(
        choices=[(0, '上海'), (1, '广州'), (2, '东莞')]
    )


def fm(request):
    if request.method == 'GET':
        # 从数据库中获取数据到字典
        dic = {
            "user": 'r1',
            'pwd': '123123',
            'email': 'sdfsd',
            'city1': 1,
            'city2': [1,2]
        }
        # 初始化操作
        obj = FM(initial=dic)
        return render(request, 'fm.html', {'obj': obj})
    elif request.method == 'POST':
        obj = FM(request.POST)
        if obj.is_valid():		判断信息是否正确,正确为True,否则为Flase		
            # 认证通过后的操作
            models.UserInf.objects.create(**obj.cleaned_data) 正确信息,字典形式
        else:
            # 错误信息的几种显示形式
            print(obj.errors)				错误信息,继承ErrorDict
            print(obj.errors.as_json())		json字典形式
            print(obj.errors['user'])		通过字典方式获取
            print(obj.errors['user'][0])	获取第一个错误信息
            return render(request, 'fm.html', {'obj': obj})
        return redirect('/fm/')

ulrs.py

url(r'^fm/', views.fm),

fm.html

<form method="post" action="/fm/">
    {% csrf_token %}
    <p>{{ obj.user.label }}{{ obj.user }}{{ obj.errors.user.0 }}</p>
    <p>{{ obj.pwd }}{{ obj.errors.pwd.0 }}</p>
    <p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
    <p>{{ obj.f }}{{ obj.errors.f.0 }}</p>
    {{ obj.p }}
    {{ obj.city1 }}
    {{ obj.city2 }}
    <input type="submit" value="提交"/>
</form>	

<form method="post" action="/fm/">
    {% csrf_token %}
    <p><input type="text" name="user" placeholder="用户名">{{ obj.errors.user.0 }}</p>
    <p><input type="text" name="pwd" placeholder="密码">{{ obj.errors.pwd.0 }}</p>
    <p><input type="text" name="email" placeholder="邮箱">{{ obj.errors.email.0 }}</p>
    <input type="submit" value="提交"/>
</form>

生成html标签

可定制高,推荐
	<form method="post" action="/fm/">
        {% csrf_token %}
        <p>{{ obj.user }}{{ obj.errors.user.0 }}</p>
        <p>{{ obj.pwd }}{{ obj.errors.pwd.0 }}</p>
        <p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
        <input type="submit" value="提交"/>
    </form>

自动生成,可定制性差
	<form method="post" action="/fm/">
        {% csrf_token %}
        {{ obj.as_ul }}
        <input type="submit" value="提交"/>
    </form>

	<form method="post" action="/fm/">
        {% csrf_token %}
        {{ obj.as_p }}
        <input type="submit" value="提交"/>
    </form>

	<form method="post" action="/fm/">
        {% csrf_token %}
        <table>
            {{ obj.as_table }}
        </table>
        <input type="submit" value="提交"/>
    </form>
原文地址:https://www.cnblogs.com/todayisafineday/p/8783734.html