2019独角兽企业重金招聘Python工程师标准>>>

Django笔记-5-视图

概述

作用

视图接受web请求, 并相应web请求;

本质

视图就是一个Python中的函数

相应

  • 网页

    • 重定向
    • 错误视图
      • 404
      • 500
      • ...
  • Json数据
  • 过程: 用户输入网址→Django解析网址→(获得访问字段)→匹配urls→(获得视图函数)→视图通过模板渲染数据→返回给浏览器

url配置

配置流程

  1. 制定根URL配置文件

    在project文件夹下, seetings.py文件夹下

    ROOT_URLCONF=‘project.urls’
    
  2. urlpatterns

    • 一个url实例的列表

    • url对象

      • 正则表达式
      • 视图名称
      • 名称
  3. url匹配正则表达式的注意事项

  • 如果想要从url中获取一个值, 需要对正则加小括号

    • 匹配正则前方不需要增加反斜杠
    • 正则前需要加r表示字符串不转义
  1. 引入其他url配置

    在应用中创建urls.py文件, 定义此应用的url方法, 在主项目文件urls.py中使用include()方法引入;

  2. URL的反向解析

    • 概述

      如果在视图/模板中使用了硬编码链接, 在url配置发生改变时,动态生成链接的地址全部需要更改

    • 解决

      在使用链接时, 通过url配置的名称,动态生成url地址

    • 作用

      使用url模板

      示例:

      # project/urls.py
      url(r'^', include('app.urls', namespace="app"))
      
      # app/urls.py
      url(r'^good/(\d+)/$)', views.good, name='good'
      
      # index.html
      <a href="/good/1/">硬编码链接</a>
      <a href="{% url 'app:good ' 1 %}">反向解析链接</a>
      

视图函数

  1. 定义视图

    本质: 一个函数

    • 视图参数:

      • request:一个HttpRequest的实例
      • 通过正则表达式获取的参数
    • 位置

      一般在views.py文件下定义

  2. 错误视图

    • 404视图:找不到网页时返回错误

      在templates目录下定义404.html

      配置settings.py

      DEBUG=False
      

ALLOWED_HOST=[‘*’] # 允许任何人访问 ```

  • 500视图:在视图代码中出现错误

  • 400视图:用户的操作出现错误

HttpRequest 对象

  1. 概述

    服务器接收http请求后, 会根据报文创建HttpResponse对象;

    视图的第一个参数就是HttpResponse对象

    Django创建的, 之后调用视图时传递的视图

  2. 属性

    1. path: 请求的完整路径, 不包括域名和端口;
    2. method: 表示请求的方式, 常用的有GET/POST;
    3. encoding: 表示浏览器提交的数据的编码方式;(一般为UTF-8);
    4. GET: 类似与字典的对象,包含了GET请求的所有参数;
    5. POST: 类似与字典的对象,包含了POST请求的所有参数;
    6. FILES: 类似与字典的对象,包含了所有上传的额文件;
    7. COOKIES: 字典对象, 包含所有cookie;
    8. session: 类似字典的对象,表示当前会话;
  3. 方法

    is_ajax(): 如果是通过XMLHttpRequest发起的, 返回True

  4. QueryDict对象

    1. request对象中的GET/POST都属于QueryDict对象;

    2. 方法

      • get()

        作用: 根据键获取值, 仅一个值

      • getlist()

        将键的值以列表的形式返回, 可以获取多个值

  5. GET属性

    目的: 获取浏览器传递给服务器的数据

  6. POST属性

    使用表单提交POST请求

    关闭CSRF

HttpResponse对象

  1. 概述

    作用: 给浏览器返回数据;

    HttpRequest对象是由django创建的, HttpResponse对象是由程序员创建

  2. 用法

    • 不调用模板,直接返回数据

    • 调用模板

      • 使用render方法

        • 原型

          render(request, templateName, {context})

        • 作用

          结合数据和模板, 返回完成的HTML页面

        • 参数

          request

          templateName

          context

        • 示例

          def students(request):student_list = Student.objects.all()return render(request, 'app/students.html',{"students": student_list})
          
  3. 属性

    • content: 返回内容

    • charset: 返回数据的编码格式

    • status_code: 响应状态

      200/304/404...

    • content-type: 指定输出的MIME类型

  4. 方法

    • init

      使用页面内容实例化HttpResponse对象

    • write(content)

      以文件的形式写入

    • flush()

      以文件的形式输出缓冲区

    • set_cookie(key, value=‘’, max_Age=None, exprise=None)

      设置cookies

    • delete_cookie(key)

      删除cookie

      注意:

      如果删除一个不存在的cookie , 那么什么都不会发生.

  5. 子类HttpResponseRedirect

    • 功能

      重定向: 服务器端的跳转

      简写: redirect()

      to 推荐使用反向解析

  6. 子类JsonResponse

    • 返回json数据, 一般用于异步请求(ajax)

    • __init__ :(self, data)

    • data: 字典对象

    • 注意: content-type类型为application/json

Session状态保持

  1. 概述

    • http协议是无状态的, 每次请求都是一次新的请求, 不记住之前请求.

    • 客户端与服务器端的一次通信就是一次会话

    • 为实现状态的保持, 在客户端或服务端存储会话的数据

  2. 存储方式有cookie和session

    • cookie: 所有数据都存储在客户端, 不要存敏感数据(不安全,数据量小)
    • session: 所有数据存储在服务端, 在客户端用cookie存储session_id
  3. 目的

    在一段时间内跟踪请求者的状态, 可以实现跨页面访问当前的请求者数据

  4. 注意

    不同的请求者不共享此数据, 与请求者一一对应.

  5. 启用session

    settings.py中

    • INSTALLED_APPS中默认启用

    • MIDDLEWARE中默认启用

  6. 使用session

    • 启用session后, 每个HttpRequest对象都有一个session属性,就是一个类似字典的对象;

    • get(key, default=None): 根据键获取session值

    • clear(): 清空所有的会话

    • flush(): 删除当前的会话和cookie

    • 设置过期时间:set_expiry(value)

      如果不设置,两个星期后过期;

      value是整数:例如10,表示10秒钟;

    • 存储session的位置

      • 数据库: 默认存储在 数据库中;
      • 缓存: 只存储在本地内存中, 如果丢失不能找回,比数据库快;
      • 数据库和缓存: 优先从本地缓存中读取, 读取不到再去数据库中获取
    • 使用redis存储session

      • pip install django-redis-session

看老师犯了个错误的心得: 每个代码都很重要.

转载于:https://my.oschina.net/frank1126/blog/3055816

Django笔记-5-视图相关推荐

  1. Django 笔记4 -- 模板

    Django 笔记4 – 模板 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django官 ...

  2. Django 笔记3 -- URL

    Django 笔记3 – URL Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django ...

  3. Django 笔记2 -- Django 项目

    Django 笔记2 – Django 入门 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: ...

  4. Django笔记-实现用户退出登录(logout)

    Django笔记-实现用户的登出 Django logout()方法介绍: 一.登录login(user,request): 将通过认证的用户的唯一标识信息(主键id),通过哈希加密写入到当前sess ...

  5. Django笔记总结

    1.web框架的本质 web通信流程 web我们这里指的就是通过浏览器去访问服务端,请求页面或者数据的通信方式,属于B/S架构.就是我们常见的网站.浏览器与服务端的通信流程:浏览器客户端发送一个请求信 ...

  6. Django整理(二) - 视图和模板的初步使用

    Django中的视图 · Django使用视图来编写web应用的业务逻辑 · Django的视图也就是一个函数,可称为视图函数 · 视图定义在应用的view.py文件中 · 视图需要绑定一个URL地址 ...

  7. Django 笔记6 -- 多表查询

    Django 笔记6 – 多表查询 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...

  8. Django 笔记5 -- 数据库

    Django 笔记5 – 数据库 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django ...

  9. Django 笔记1 -- 环境搭建

    Django 笔记1 – 环境搭建 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...

最新文章

  1. python基础代码事例-Python基础总结成千行代码,让Python入门更简单!
  2. 机器学习导论(张志华):正定核性质
  3. frida 安装特定版本
  4. 中芯国际:与阿斯麦集团签订购买单 总价12亿美元
  5. 【git】源代码管理工具 GIT的使用步骤的详细讲解
  6. c语言影碟租借管理系统,影碟出租信息管理系统
  7. 190328文件处理
  8. FindTask练习
  9. Leetcode力扣 MySQL数据库 1384 按年度列出销售总额
  10. Python练习题——快乐数字
  11. APIMonitor安装
  12. SwiftUI中微信认证成功但App回调方法未被调用的解决
  13. Spring全家桶--Spring5
  14. 利用python对b站某GPT-4解说视频的近万条弹幕进行爬取、数据挖掘、数据分析、弹幕数量预测及情绪分类
  15. QTextStream 类(文本流)和 QDataStream 类(数据流)
  16. tcp socket 和 socket文件
  17. Python绘制MACD指标图
  18. 【TARS】TarsCpp-Http服务示例
  19. Ice自学第一步——Windows下安装Ice和设置Ice的环境变量
  20. SCI 文章被拒是一种怎样的体验? - 易智编译EaseEditing

热门文章

  1. jquery 回车事件
  2. tomcat 增加运行内存
  3. [转]“Ceph浅析”系列之(二)—Ceph的设计思想
  4. Win2003_IIS6服务器设置排错解答
  5. 旧版 npm 安装 node_modules 模块目录层次过深,导致 win 下无法删除
  6. PHP通过计算经纬度获取附近的数据信息
  7. CNN-4: GoogLeNet 卷积神经网络模型
  8. openstack介绍(二)
  9. Oracle_双机备份_资料
  10. 51nod 1575 Gcd and Lcm