Django-forms-cookies-session

  1. 关系映射
    1. 一对一映射
      任何一个类中:
      属性 = models.OneToOneField(Entry)
      数据查询:

      	class Author(models.Model):
      		xxx
      
      	class Wife(models.Model):
      		xxx
      		author = models.OneToOneField(Author)
      
      	Wife查找Author的话,直接通过 author 属性即可
      	Author查找Wife的话,通过隐式属性 wife 即可
      
    2. 一对多映射
      在"多"的实体类中增加对"一"的实体类的引用:
      属性 = models.ForeignKey(Entry)

      查询:

      	class Publisher(models.Model):
      		xxx
      
      	class Book(models.Model):
      		xxx
      		publisher = models.ForeignKey(Publisher)
      
      	通过 Book 查询Publisher ,直接通过 publisher 属性即可
      	通过 Publisher 查询 Book,通过隐式属性 book_set 来表示对book的查询引用
      
    3. 多对多映射
      在关联的两个类的任意一个类中:
      属性 = models.ManyToManyField(Entry)

      查询:

      	class Author(models.Model):
      		pass
      	class Book(models.Model):
      		xxx 
      		authors = models.ManyToManyField(Author)
      
      
      通过 Book 查询 Author ,通过 authors 表示book对Author的查询引用
      通过 Author 查询 Book ,通过 隐式属性 book_set来表示对Book的查询引用
      
  2. request - 请求对象
    1. 常用成员
      1. request.path
      2. request.method
      3. request.GET
      4. request.POST
      5. request.COOKIES
      6. request.META
        request.META[‘HTTP_REFERER’]
        request.META.get(‘HTTP_REFERER’,’/’)
    2. get 请求数据
      request.GET --> 字典
    3. post 请求数据
      request.POST --> 字典
      CSRF验证:
      解决方案:

      {% csrf_token %}

      =====================================================
  3. Django中的forms模块
    1. forms模块的作用
      通过 forms 模块,允许将表单与class相结合
      允许通过 class 生成表单

    2. 使用 forms 模块的步骤

      1. 在应用中创建 forms.py
      2. 导入 django 提供的 forms
        from django import forms
      3. 创建class,一个class会生成一个表单
        class ClassName(forms.Form)
      4. 在 class 中创建属性
        一个属性对应到表单中是一个控件
    3. forms.Form 的语法
      属性 = forms.类型(参数)

      1. 类型 
      	forms.CharField() : 文本框 <input type="text">
      	forms.ChoiceField() : 下拉选项框 <select>
      	forms.DateField() : 日期框 <input type="date">
      	... ...
      3. 参数
      	1. label 
      		控件前的文本
      	2. widget
      		指定小部件
      	3. initial
      		控件的初始值(主要针对文本框类型)
      		value=""
      	
      
    4. 在模板中解析form对象

      1. 注意

        1. 需要自定义
        2. 表单中的按钮需要自定义
      2. 解析form对象
        在 视图中创建form对象并发送到模板中解析.

        ex:
        	form = RemarkForm()
        	return render(request,'xx.html',locals())
        

        1.手动解析
        {% for field in form %}
        field : 表示的是form对象中的每个属性(控件)
        {{field.label}} : 表示的是label参数值
        {{field}} : 表示的就是控件
        {% endfor %}
        2.自动解析
        1.{{form.as_p}}
        将 form 中的每个属性(控件/文本)都使用p标记包裹起来再显示
        2.{{form.as_ul}}
        将 form 中的每个属性(控件/文本)都使用li标记包裹起来再显示
        注意:必须手动提供ol 或 ul 标记
        3.{{form.as_table}}
        将 form 中的每个属性(控件/文本)都使用tr标记包裹起来再显示
        注意:必须手动提供table标记

        • 练习:
          1. 创建一个注册Form类 - RegisterForm
            uname - 用户名称
            upwd - 用户密码(文本框)
            uage - 用户年龄(数字框)
            uemail - 电子邮箱
          2. 创建 13-register 路由
            get 请求 :
            创建 RegisterForm 对象并发送到 13-register.html中显示
            post 请求:
            接收13-register.html 中的数据并输出
    5. 通过 forms 模块获取表单数据

      1. 通过 forms.Form 子类的构造器来接收 post 数据
        form = RemarkForm(request.POST)
      2. 必须是 form 通过验证后,才能取值
        form.is_valid()
        返回True:通过验证,可以取值
        返回False:暂未通过验证,则不能取值
      3. 通过 form.cleaned_data 属性接收数据
        form.cleaned_data : dict 类型
    6. forms 模块的高级处理
      允许将Models实体类和Forms模块结合到一起使用

      1. forms.py 中创建class
        继承自forms.ModelForm
      2. 创建内部类Meta,关联Model类
        关联信息的属性如下:
        1. model : 指定要关联的实体类
        2. fields : 指定要从Model中取哪些字段生成控件
          1. 取值为 “all
            取全部的属性生成控件
          2. 取值为 列表
            将允许生成控件的属性名放在列表中
        3. labels : 指定每个属性对应的label值
          取值为字典
          labels = {
          ‘属性名’:“label值”
          }
    7. 内置小部件 - widget

      1. 什么是小部件
        表示的是生成到网页上的控件以及一些其他的html属性

        message=forms.CharField(widget=forms.Textarea)
        upwd=forms.CharField(widget=forms.PasswordInput)

      2. 常用的小部件类型
        1.TextInput: type=‘text’
        2.PasswordInput: type=‘password’
        3.NumberInput: type=“number”
        4.EmailInput: type=“email”
        5.URLInput: type=“url”
        6.HiddenInput: type=“hidden”
        7.CheckboxInput: type=“checkbox”
        8.CheckboxSelectMultiple: type=“checkbox”
        9.RadioSelect : type=“radio”
        10.Textarea :
        11.Select:
        12.SelectMultiple:

      3. 小部件的使用

        1. 继承自forms.Form
          1. 基本版
            1. 语法
              属性 = forms.CharField() #无预选值使用
              text,password,email,url,textarea,checkbox
              属性 = forms.ChoiceField() #有预选值使用
              checkbox,radio,select

              属性 = forms.CharField(
              label=‘xxx’,
              widget=forms.小部件类型
              )

            2. 示例:
              upwd = forms.CharField(
              label=‘用户密码’,
              widget=forms.PasswordInput
              )

              message = forms.CharField(
              label=‘评论内容’,
              widget=forms.Textarea
              )

          2. 高级版
            1. 特征
              在指定控件类型的基础之上还能指定控件的一些html属性值
            2. 语法
              属性 = forms.CharField(
              label=‘xxx’,
              widget=forms.小部件类型(
              attrs={
              ‘html属性名’:‘值’,
              ‘html属性名’:‘值’,
              }
              )
              )
        2. 继承自forms.ModelForm
          语法:
          class ClassName(forms.ModelForm):
          class Meta:
          model = xxxx
          fields = “all” / ["",""]
          labels = {
          “xxx”:“xxx”
          }
          #指定小部件
          widgets = {
          ‘属性名1’:forms.小部件类型,
          ‘属性名2’:forms.小部件类型(
          attrs={
          “html属性名”:“值”
          }
          )
          }
  4. cookies 和 session
    1. cookies
      1. 什么是cookies
        保存在客户端浏览器上的一段存储空间
      2. Django中的cookies
        使用 响应对象 将cookie保存进客户端
        1. 响应对象
          1. HttpResponse()
            resp = HttpResponse()
          2. render()
            resp = render(request,‘xxx.html’,locals())
          3. redirect()
            resp = redirect(’/’)
        2. 保存cookie
          响应对象.set_cookie(key,value,expires)
          key:cookie的名字
          value:cookie的值
          expires:保存时长,以s为单位的数字(s不写)
        3. 获取cookie
          request.COOKIES
          封装了当前站点下所有的cookie - 字典
    2. session
      1. 什么是session
        session - 会话
        在服务器上开辟一段空间用于保留浏览器和服务器交互时的重要数据
      2. 保存 session 的值到服务器
        request.session - 字典
        request.session[‘KEY’] = VALUE
      3. 获取session的值
        VALUE = request.session[‘KEY’]
      4. 删除session的值
        del request.session[‘KEY’]
      5. settings.py 中有关session的设置
        1. SESSION_COOKIE_AGE
          作用:指定sessionid在cookies中的保存时长
          SESSION_COOKIE_AGE = 60*30
        2. SESSION_EXPIRE_AT_BROWSER_CLOSE = True
          设置只要浏览器关闭时,session就失效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值