美文网首页
Django-请求

Django-请求

作者: 遇明不散 | 来源:发表于2019-05-18 17:14 被阅读0次

HttpRequest - 请求

HttpRequest
  • HttpRequest在Django中就是请求对象的封装体现,里面封装了请求过程中的所有信息
  • 在Django中HttpRequest被封装成了request对象,被封装到请求处理视图函数中做为参数,在调用视图时自动传入
HttpRequest中的主要内容
  • request.scheme 请求协议
  • request.body 请求主体
  • request.path 请求路径(具体资源路径)
  • request.get_host() 请求的主机地址 / 域名
  • request.method 获取请求方法
  • request.GET 封装了get请求方式所提交的数据
  • request.POST 封装了post请求方式所提交的数据
  • request.COOKIES 封装了 cookies 中的所有数据
  • request.META 封装了请求的元数据
  • request.META.HTTP_REFERER 封装了请求的源地址
获取请求提交的数据
get 请求方式
request.GET['名称']
request.GET.get('名称')

# 使用表单提交数据
<form method='get'></form>
# 通过地址拼查询字符串
<a href="地址?参数1=值1&参数2=值2"></a>
# 该写法属于Django表准并非Http标准,不能用 request.GET[]
url(r'^xxx/(\d+)')
post 请求方式
request.POST['名称']

# Django的自带验证机制
# CSRF:Cross-Site Request Forgery  跨站点请求伪装
# 解决方案:
#   需要在表单中的第一行增加:{%csrf_token%} (推荐)
#   取消 csrf 的验证 -> 删除 settings.py 中 MIDDLEWARE 中 CsrfViewMiddleware 中间件
#   在处理函数上增加装饰器 @csrf_protect

使用forms模块处理表单

forms模块的作用

通过forms模块,允许将表单与class相结合,允许通过class生成表单

使用forms模块
# 1.创建 forms.py 文件
# 2.导入 django 的 forms
from django import forms
# 3.创建 class ,一个 class 对应生成 一个表单
class ClassName(forms.Form)
    pass
# 4.在 class 中 创建属性
# 一个属性对应到表单中会生成一个控件
在模板中解析 form 对象
注意
  • 需要自定义<form>
  • 需要自定义按钮
处理方法

在视图中创建form的对象,并发送到模板中

form = RemarkForm()
return render(request,'xxx.html',locals())
在模板中解析 form 对象
  • 手动解析
{% for field in form %}
    {{field}}  # 表示的就是控件
    {{field.label}}  # 表示的是控件中lable的值
{% endfor %}
  • 自动解析
// 将form对象中的每个属性使用p标记包裹起来,再显示
{{form.as_p}}

// 将form对象中的每个属性使用li标记包裹起来,再显示在网页上
// 注意:必须手动提供<ol></ol> 或 <ul></ul>
{{form.as_ul}}

// 将form对象中的每个属性使用tr标记包裹起来,再显示在网页上
// 注意:必须手动提供 <table>
{{form.as_table}}
在视图中通过 forms.Form自动获取表单数据
# 通过 forms.Form 的构造器来接收post数据
form = XXXForm(request.POST)

# 必须使form通过验证之后,再取值
form.is_valid()
#   返回True:提交的数据已通过所有验证,允许取值
#   返回False:提交的数据未通过验证,无法取值

# 获取表单中的数据
data = form.cleaned_data
forms模块的高级处理

将 Models 和 Forms 结合到一起使用

# 在 forms.py 中创建 class,继承自 forms.ModelForm
class User(models.Model):
    uphone = models.CharField(max_length=11)
    upwd = models.CharField(max_length=20)

# 创建内部类 Meta,去关联 Model
class LoginForm(forms.ModelForm):
    class Meta:
        # 指定要关联的实体类
        model = User

        # 指定从Model中取哪些字段生成控件
        # 取值 "__all__",表示全部属性都要生成控件
        # 取值 列表,声明允许生成控件的属性名
        fields = '__all__'

        #  指定每个属性所关联的label,取值为字典
        labels = {
            'uphone':'手机号',
            'upwd':'密码',
        }

内置小部件

小部件(widget),表示的是生成到页面上的控件的类型以及其他的html属性

常用小部件类型
  • TextInput : type="text"
  • PasswordInput : type="password"
  • NumberInput : type="number"
  • EmailInput : type="email"
  • URLInput : type="url"
  • HiddenInput : type="hidden"
  • CheckboxInput : type="checkbox"
  • Textarea : <textarea></textarea>
  • Select : <select></select>
小部件的使用
继承自 forms.Form
  • 基本版
    只指定控件的类型
class RemarkForm(forms.Form):
    属性 = forms.CharField(
        label='文本',
        widget=forms.小部件类型
    )
  • 高级版
    指定控件类型的基础上还允许设置html的一些相关属性
属性 = forms.CharField(
    label='文本',
    widget=forms.小部件类型(
        attrs = {
            'html属性名':'属性值',
            'html属性名':'属性值',
        }
    )
)
继承自 forms.ModelForm
class XXXForm(forms.ModelForm):
    class Meta:
        model = User
        fields = "__all__"
        labels = {
            '属性1':'Label1',
        }
        # 在之前的基础上增加 widgets 属性
        widgets = {
            '属性1':forms.小部件类型(attrs={})
        }

相关文章

  • Django-请求

    HttpRequest - 请求 HttpRequest HttpRequest在Django中就是请求对象的封装...

  • django-参数化url地址请求链接

    通过传统的”?”传递参数 例如,http://127.0.0.1:8000/plist/?p1=china&p2=...

  • [原](05)Django-创建我的网页

    Django-创建我的网页 源码地址:https://github.com/edrainann/Django_we...

  • Web应用框架

    Django-提供了构建Web系统的基本应用框架-MTV模式: 模型(model), 模板(Template), ...

  • 2018-04-25

    Django-上传图片 1. 模型定义中将属性定义成 models.ImageField 类型 pic=model...

  • Django-分页

    Django-分页 1.创建对象 Paginator 对象的 page()方法返回 Page 对象,不需要手动构造...

  • django起航2-初始模板

    Django-模板 在应用目录blog下创建templates目录(必须是这个,记得加s) 在templates中...

  • Django-分页

    django-分页 一.django自带的分页 以读取UserInfo表为例 1.导入模块 from django...

  • 前言: Django-企业级开发框架

    Django-介绍 它是一个Python Web框架, 在众多Python Web框架中,它是应用最广泛的,发展最...

  • [PPJ_17] RESTful接口测试脚本备份

    接前文:[1] Django-数据库配置、数据序列化、视图创建、URL路由配置、API编辑操作[2] Django...

网友评论

      本文标题:Django-请求

      本文链接:https://www.haomeiwen.com/subject/fthaaqtx.html