zoukankan      html  css  js  c++  java
  • 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>
    
  • 相关阅读:
    【图论】拓扑排序应用
    【图论】广度优先搜索和深度优先搜索
    最小生成树-Prim算法和Kruskal算法
    最短路径—Dijkstra算法和Floyd算法
    【图论】信手拈来的Prim,Kruskal和Dijkstra
    javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,
    javascript 中的 true 或 false
    解决IIS7该问.svc文件的错误问题
    mysql常用函数
    异步上传文件,ajax上传文件,jQuery插件之ajaxFileUpload
  • 原文地址:https://www.cnblogs.com/todayisafineday/p/8783734.html
Copyright © 2011-2022 走看看