s6day76

内容回顾:
 Form组件:
  - 类  继承Form
  - 字段  字段
  - 实例化
  - is_valid()
  - cleaned_data
  - errors
 Form 组件:
  class TeacherForm(Form):
     username = fields.CharField(
        required=True,
        error_messages={'required':'用户名不能为空'},
        widget=widgets.TextInput(attrs={'placeholder':'用户名','class':'form-control'})
     ) # 不能为空
     password = fields.CharField(required=True,error_messages={'required':'密码不能为空'}, widget=widgets.TextInput(attrs={'placeholder':'密码','class':'form-control'})) # 不能为空
     email = fields.EmailField(required=True,error_messages={'required':'邮箱不能为空','invalid':'邮箱格式错误'},widget=widgets.EmailInput(attrs={'placeholder':'邮箱','class':'form-control'}))   # 不能为空,且邮箱格式
    def add_teacher(request):
    if request.method == 'GET':
        form = TeacherForm()
        return render(request,'add_teacher.html',{'form':form})
    else:
        """
        1. 用户请求数据验证
        2. 自动生成错误信息
        3. 打包用户提交正确信息
        4. 错误:保留上次输入内容
        5. 定制页面上显示的HTML标签
        Django Form组件
        1. 创建规则(类,字段)
            class Foo:
                username = xxx
                password = xxx
                email = xxx
        2. 数据和规则进行匹配
        """
        form = TeacherForm(data=request.POST) # 数据和规则放置一起
        if form.is_valid():                       # 开始校验,并获取校验结果
            # print('执行成功',form.cleaned_data)          # 所有匹配成功,字典
            # {'username': 'asd', 'password': 'sdf', 'email': 'sadf@live.com','ut_id':1}
            form.cleaned_data['ut_id'] = 1
            models.UserInfo.objects.create(**form.cleaned_data)
            return redirect('/teachers/')

return render(request, 'add_teacher.html',{'form':form})

Django生命周期:客户请求首先来到wsgi,接着来到路由系统在走到views视图,如果和数据库打交道就通过ORM和数据库建立链接。拿到数据后和模板一起柔和在一起在渲染发给前端,发给前端的是字符串。
 
 py2、py3字符串:
  py2:
   字符串(utf-8/gbk编码之后值)      unicode
  py3:
   bytes(utf-8/gbk编码之后值)       字符串(unicode)
 Http请求本质是:  消息头与返回体之间用2个\r\n 分开  之间用一个\r\n
  
今日内容:
 1. 班级管理
 
 2. 学生管理
 
 3. 老师管理

内容详细:
 
 1. 班级管理
     使用这种方法定义Form验证时:数据源无法更新
  class ClassForm(Form):
   caption = fields.CharField(error_messages={'required':'班级名称不能为空'})
   # headmaster = fields.ChoiceField(choices=[(1,'娜娜',)])
   headmaster_id = fields.ChoiceField(choices=models.UserInfo.objects.filter(ut_id=2).values_list('id','username'))

def class_add(request):
   if request.method == 'GET':
    form = ClassForm()
    return render(request,'class_add.html',{'form':form})
   else:
    form = ClassForm(data=request.POST)
    if not form.is_valid():
     return render(request, 'class_add.html', {'form': form})
    models.ClassList.objects.create(**form.cleaned_data)
    return redirect('/class_list/')
 
 
  1. headmaster_id
  2. 数据源无法实施更新,重写构造方法
   方式一(推荐):
    class ClassForm(Form):
     caption = fields.CharField(error_messages={'required':'班级名称不能为空'})
     # headmaster = fields.ChoiceField(choices=[(1,'娜娜',)])
     headmaster_id = fields.ChoiceField(choices=[])

def __init__(self,*args,**kwargs):
      super().__init__(*args,**kwargs)
      self.fields['headmaster_id'].choices = models.UserInfo.objects.filter(ut_id=2).values_list('id','username')

方式二:
   
    from django.forms.models import ModelChoiceField
    class ClassForm(Form):
     caption = fields.CharField(error_messages={'required':'班级名称不能为空'})
     # headmaster = fields.ChoiceField(choices=[(1,'娜娜',)])
     headmaster_id = ModelChoiceField(queryset=models.UserInfo.objects.filter(ut_id=2))
  
 2. 学生管理(同上)
 
 
 3. 老师管理
 
  编辑老师:
   1. URL跳转
   2. 根据nid获取当前老师所有信息:用户名,密码,邮箱,任课所有班级
   3. form生成HTML和默认值
 
 
 4. 用户登录
  - form的字段可以定义正则表达式
   password = fields.CharField(
    required=True,
    min_length=3,
    max_length=18,
    error_messages={
     'required': '密码不能为空',
     'min_length': '密码长度不能小于3',
     'max_length': '密码长度不能大于18',
     'invalid': '密码格式错误',
    },
    validators=[RegexValidator('\d+','只能是数字') ]#定义正则表达式
   )
  - 主动向form中添加错误信息这个是用在通过了Form判断但是没有通过数据库判断
   # form.add_error('password','用户名或密码错误')
            form.add_error('password',ValidationError('用户名或密码错误'))
 
 
 
 
 5. Form扩展(钩子函数)
 
 
 6. 中间件
  Django中中间件是什么?
   - 是一个类
   
   
内容总结:
 1. Form基本使用
  - 类
  - 字段
  - is_valid
  - cleaned_data
  - errors
 2. 字段参数:
   - max_length
   - min_length
   - validators = [RegexValidator('xxx')]
  
 3. 钩子函数
  - clean_字段名
  注意:
   必须有返回值
   只能拿自己当前字段值
   raise ValidationError('xxx')
 4. 下拉框数据源实时更新
  - 重写构造方法
   __init__
    - 先执行父类构造方法
    - self.fields['xx'].choices = xxxxx
  - ModelChoiceField
  
 5. 中间件
  - 中间件是什么?是一个类
  - 返回值注意   request返回要谨慎, response有返回值,
  - 做过什么:
   - 用户登录
   - 日志记录
   - csrf
   - session
   - 权限管理***

Django之Form进阶的更多相关文章

  1. Django的Form(二)

    上一篇已经简单介绍了Django的Form,现在开始进阶操作了 ..... 创建Form类的时候,主要涉及到Form字段和Form的插件,字段用于做form验证,插件用来生成HTML DjiangoF ...

  2. 【python】-- Django ORM(进阶)

    Django ORM(进阶) 上一篇博文简述了Django ORM的单表操作,在本篇博文中主要简述Django ORM的连表操作. 一.一对多:models.ForeignKey() 应用场景:当一张 ...

  3. Django之Form与ModelForm组件

    Django之Form与ModelForm组件 1.Form介绍 Form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 O 保留上次的输入内容 普通方式手写注册功能 vi ...

  4. Django之Form组件

    Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...

  5. Django models Form model_form 关系及区别

    Django models Form model_form

  6. 【Django】--Form组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 例子: 1.创建Form类 from djan ...

  7. Django基础——Form&Ajax篇

    一 Form 在实际的生产环境中,登录和注册时用户提交的数据浏览器端都会使用JavaScript来进行验证(比如验证输入是否为空以及输入是否合法),但是浏览器可能会禁用JavaScirpt,同时也有人 ...

  8. Python之路【第二十一篇】:Django之Form组件

    Django之Form组件   Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1. ...

  9. 第十一篇:web之Django之Form组件

    Django之Form组件   Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功 ...

随机推荐

  1. vue-cli 跳转方式

    一:router-link标签跳转 <router-link to='/citylist'><div class="header-right">城市< ...

  2. Groovy学习笔记(1)读取CSV文件

      本篇分享讲展示如何在Groovy中读取CSV文件.   我们要读取的CSV文件foo.csv的内容如下:   Groovy代码如下: //import packages import java.i ...

  3. net4log 添加自定义变量

    在log4net.config中 <parameter> <parameterName value="@czyid" /> <dbType value ...

  4. 力软开发力软框架力软敏捷开发learun

    版本:6.1.6.2 演示地址:www.fishcmonkey.com 联系QQ:6539471

  5. mysql查看执行sql语句的记录日志

    开启日志模式 -- 1.设置 -- SET GLOBAL log_output = 'TABLE';SET GLOBAL general_log = 'ON';  //日志开启 -- SET GLOB ...

  6. c# 封装Dapper操作类

    using Dapper; using DapperExtensions; using System.Collections.Generic; using System.Configuration; ...

  7. (整理)Sublime Text 3 安装、破解、安装Package Control、汉化、添加到右键菜单、代码格式化、禁止更新

    Sublime Text 3好用,但是每次安装到最后用着顺手,得在网上找半天安装.破解.安装Package Control.汉化.添加到右键菜单.代码格式化等等的教程,今天有空给自己整理一下吧. 一. ...

  8. MVCHtmlHelper使用

    实例产品源码下载地址:http://www.jinhusns.com/Products/Download

  9. TestOps - 最健壮性的测试角色

    一十一 发表于 2018-03-02 09:10:08 TestOps   最具影响力的测试运维一体化综合平台. DevOps实现了从代码到服务的快速落地,而TestOps集成了DevOps效率,更是 ...

  10. inheritPrototypal.js

    // 原型式继承 // 其基本思路是借助原型可以基于已有的对象创建新的对象 function object(o){ function F(){} F.prototype = o; return new ...