zoukankan      html  css  js  c++  java
  • Django:学习笔记(4)——请求与响应

    Django:学习笔记(4)——请求与响应

    0、URL路由基础

      Web应用中,用户通过不同URL链接访问我们提供的服务,其中首先经过的是一个URL调度器,它类似于SpringBoot中的前端控制器。

      

      它就是一个脚本文件,我们称它为一个URLConf模块,它的样子如下:

      

      当一个用户请求Django 站点的一个页面,下面是Django 系统决定执行哪个Python 代码提供的算法:

    • 首先,Django确定要使用哪一个URLconf模块。我们可以在setting.py 中进行配置,如ROOT_URLCONF = 'myapi.urls'
    • 接着,Django加载模块内的urlpatterns,他如上所示,是一个列表,基于path()或者re_path()
    • Django 依次匹配每个URL 模式,在与请求的URL 匹配的第一个模式停下来。
    • 一旦其中一个URL模式匹配,Django就会导入并调用给定的视图,这是一个简单的Python函数(或基于类的视图)。视图传递以下参数:
      • 一个HttpRequest实例。
      • 关键字参数由路径表达式匹配的任何命名部分组成,由django.urls.path()或django.urls.re_path()的可选kwargs参数中指定的任何参数覆盖。
      • 如果匹配的URL模式未返回任何命名组,则正则表达式中的匹配将作为位置参数提供。   
    • 如果没有URL模式匹配,或者在此过程中的任何点期间引发异常,Django将调用适当的错误处理视图。

    0.1、URL地址捕获

      我们可以使用<指定类型:名称>捕获URL中的值,他可以将路径值转换为指定类型的参数。

      

      指定类型包括:

    • int:0~N
    • slig:可理解为注释、后缀、附属等概念,是url拖在最后的一部分解释性字符
    • uuid:匹配一个uuid格式的对象。为了防止冲突,规定必须使用破折号,所有字母必须小写,例如’075194d3-6885-417e-a8a8-6c931e272f00‘ 。返回一个UUID对象;
    • path:匹配任何非空字符串,重点是可以包含路径分隔符’/‘。这个转换器可以帮助你匹配整个url而不是一段一段的url字符串。

      当然,我们也可以使用正则表达式来匹配路径。

    0.2、正则表达式URL地址捕获

      在Python正则表达式中,命名正则表达式组的语法是(?P <name> pattern),其中name是组的名称,pattern是要匹配的模式。

      

    0.3、指定视图参数的默认值

      在视图上直接指定参数的同时可以设置默认值。

      

    1、请求:HttpRequest

    1.1、获取请求属性

      

    2、响应:HttpResponse

      这里主要是展示一些常见的HttpResponse操作。

    2.1、返回数据

      HttpResponse对象,可以使用write方法来输出响应信息。

      

    2.2、设置响应头

      response可以看做一个字典,可以使用response[''],添加和修改响应头。

      

      一个更常见的例子,设置访问控制的相关响应头信息

      

    2.3、设置返回值类型

      在下载文件的情况下,我们就不能返回普通的HTML代码了,content_type用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因

      

      更多的关于content-type可以查看菜鸟教程

      这里列举几个常见的文件格式:

      

    2.4、设置状态码

      设置状态码有两种方式,在声明时定义和直接赋值字段。

      

    2.5、响应JSON数据

      JsonResponse是HttpResponse的子类,用于创建JSON格式的响应,语法格式如下:

      

      它的 Content-Type 头默认设置为 application/json.第一个参数 data, 应该是一个 dict 的实例. 如果 safe 参数设置为False ,就不需要必须是dict了,它可以是任何JSON可序列化对象。否则会报类型错误。

      用法如下:

      

  • 相关阅读:
    自定义时间工具类
    http和https
    客户端是什么意思
    19.在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?)写出http常见的状态码和含义,至少5个.[完善题目]
    20.谈谈对mvc的认识。
    18.有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?
    17.如何修改SESSION的生存时间。
    16.语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
    14.对于大流量的网站,您采用什么样的方法来解决访问量问题?
    15.用PHP写出显示客户端IP与服务器IP的代码,如何防止用户使用代理的情况?[添加更多详情]
  • 原文地址:https://www.cnblogs.com/MrSaver/p/10405432.html
Copyright © 2011-2022 走看看