Django之Form验证初阶实战示例(验证篇二)

上一篇:Django之Form验证初识(Form验证篇一)点击跳转
目录篇:Django之Form及ModelForm目录篇 点击跳转
下一篇:Django之Form验证进阶常用字段注释示例(验证篇三)点击跳转

目录

  • 1.创建Django项目
  • 2.创建app(并且app目录下创建一个urls.py文件)
  • 3.定义请求的URL路由分发
  • 4.定义app下的URL路由
  • 5.url对应函数
  • 6.前端通过form对象调用字段相关信息
  • 7.启动Django
  • 8.浏览器访问URL结果

1.创建Django项目

Django之创建项目【二】:https://blog.csdn.net/Burgess_zheng/article/details/86505526

Django之Form验证初阶实战示例(验证篇二)_第1张图片

2.创建app(并且app目录下创建一个urls.py文件)

进入项目目录下
创建app命令:
   F:\Burgess\Python\pycharm实验脚本\test\project_burgess>python manage.py startapp burgess_form

Django之Form验证初阶实战示例(验证篇二)_第2张图片

3.定义请求的URL路由分发

路径:project_burgess/project_burgess/urls.py

from django.contrib import admin
from django.urls import path,re_path #Django版本2.0以上
from project_burgess import views
from django.conf.urls import url  #Django2.0
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
   
    #form
    re_path('burgess_form/', include("burgess_form.urls")),
    # url(r'^burgess_form/', include("burgess_form.urls")),


]

4.定义app下的URL路由

路径:project_burgess/burgess_form/urls.py

__author__ = "Burgess Zheng"
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from django.urls import path,re_path #Django版本2.0以上
from burgess_form import views
from django.conf.urls import url  #Django2.0


urlpatterns = [
    re_path('fm/',views.fm),
    #url(r'^fm/', views.fm),
]

5.url对应函数

1.自定义form字段验证类
2.实例化form对象(初始化信息)并把该form对象对象返回前端(前端可根据该对象调用字段相关信息)
3.前端提交的数据进行验证提取正确or错误信息及响应错误信息(把form对象返回,前端可以调用验证错误信息)

路径:project_burgess/burgess_form/views.py


from django.shortcuts import render
# Create your views here.
__author__ = "Burgess Zheng"

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'}),
        #定义插件:修改form生成的input标签type类型为:多行文本 添加class='c1'
        label="用户名",
        # initial='请输入用户名',
    )
    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='burgess_form')

    city = fields.ChoiceField(
        choices=[(0,'上海'),(1,'广州'),(2,'深圳')]
    )

    mcity = fields.MultipleChoiceField(
        choices=[(0,'上海'),(1,'广州'),(2,'深圳')]
    )

def fm(request):
    if request.method == "GET":
        #获取编辑的默认数据,从数据库拿弄成字典
        dic ={
            "user":'r1',
            "pwd" :'123123',
            "email":'sdsfs',
            "city":1,
            "mcity":[1,2],
        }
        obj = FM(initial=dic) #示例话form对象并且进行初始化标签数据(也就是form生成的标签字段值)
        return render(request,'fm.html',{'obj':obj})
                             #前端可根据obj该form对象进行应用字段标签和错误信息
    elif request.method == "POST":
        #获取用户所有的数据
        #每条数据请求的验证
        #验证成功:获取所有的正确的信息
        #验证失败:显示错误信息
        #实现以上自己写正则表达式也可以做到,但是代码量太大
        #所有django提供个form组件
        obj = FM(request.POST,request.FILES) #把接收的数据当做实参
                                            #request.FILES 接收文件

        r1 = obj.is_valid()#进行验证,验证以后,成功返回true,失败返回false
        print(r1)
        if r1:
            #如果上传文件提交的话,数据也在obj.cleaned_data,key为f,数据为value,
            # 通过我们之前学的接收上传数据就可以了
            print(obj.cleaned_data)#成功打印用户输入的数据(字典形式)

           # models.UserInf.objects.create(**obj.cleaned_data)
            #如果输入正确,获取的字典形式数据直接就添加到数据库
        else:
                #ErrorDict
            print(obj.errors['user'][0])#验证不成功,打印错误(字符串标签显示)
            print(obj.errors.as_json())  # 验证不成功,打印错误(字典显示)
            return render(request,'fm.html',{'obj':obj})
                #一定要返回obj该form对象,这样前端才可以调用错误信息

        return render(request,'fm.html')


6.前端通过form对象调用字段相关信息

涉及csrf:Django之CSRF XSS原理解析【交互篇四】https://blog.csdn.net/Burgess_zheng/article/details/86548425

路径:project_burgess/templates/fm.html




    
    Title


    
{% csrf_token %}

{{ obj.user.label }}{{ obj.user }}{{ obj.errors.user.0 }}

{{ obj.pwd }}{{ obj.errors.pwd.0 }}

{{ obj.email }}{{ obj.errors.email.0 }}

{{ obj.f }}{{ obj.errors.f.0 }}

{{ obj.p }}

{{ obj.city }}

{{ obj.mcity }}

----三种比较简单的方法如下(不推荐,自定制差)------

------------obj.as_p-------------

{{ obj.as_p }}

-------------as_ul---------------

{{ obj.as_ul }}

-------------as_table----- -------

{{ obj.as_table }}

7.启动Django

手动:python manage.py runserver 127.0.0.1:8000

pycharm:

Django之Form验证初阶实战示例(验证篇二)_第3张图片

8.浏览器访问URL结果

get请求

Django之Form验证初阶实战示例(验证篇二)_第4张图片

Django之Form验证初阶实战示例(验证篇二)_第5张图片

Django之Form验证初阶实战示例(验证篇二)_第6张图片

注释掉3中简单的的标签应用

正确点击提交

Django之Form验证初阶实战示例(验证篇二)_第7张图片

后台查看

Django之Form验证初阶实战示例(验证篇二)_第8张图片

错误提交(后端错误是注释掉的)

提交前

Django之Form验证初阶实战示例(验证篇二)_第9张图片

提交后

Django之Form验证初阶实战示例(验证篇二)_第10张图片

后台查看

Django之Form验证初阶实战示例(验证篇二)_第11张图片

上一篇:Django之Form验证初识(Form验证篇一)点击跳转
目录篇:Django之Form及ModelForm目录篇 点击跳转
下一篇:Django之Form验证进阶常用字段注释示例(验证篇三)点击跳转

 

你可能感兴趣的:(Django,Django实战篇【总】)