zoukankan      html  css  js  c++  java
  • Django的路由系统

    1. 视图(接受请求返回相应部分)

      1.CBV(class base view)和FBV(function base view)

      2.request对象

        1.request.method   获取请求的方法(get post)

        2.request.GET    通常用来获取URL里面的参数

        3.request.POST.get("book_name")

        4.request.path_info   获取用户请求的路径(不包含IP和端口/URL参数)

        5.request.body

      3.response

        1.HttpResponse   返回字符串内容

        2.render       返回 一个html页面

        3.redirect    重定向 

    JsonResponse对象

     

    JsonResponse是HttpResponse的子类,专门用来生成JSON编码的响应。

     
    from django.conf.urls import url
    from django.contrib import admin

    from . import view
    urlpatterns = [
    url(r'^json_data/', view.json_test),
    ]


    def json_test(request):
    data = {"name":"Brad Pitt","age":48}
    data1 = [11,22,33,44,55]
    # import json
    # data_str = json.dumps(data1) #把data序列化json字符串
    # return HttpResponse(data_str)
    from django.http import JsonResponse
    return JsonResponse(d

     

    Django的路由系统

     Django 1.11版本 URLConf官方文档

    URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。

    你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

    urlpatterns = [
    url(r'^json_data/', view.json_test), #^json_data正则表达式 /view.json_test接收的函数
    ]

    Django 2.0版本中的路由系统已经替换成下面的写法(官方文档):

     

    from django.urls import path

    urlpatterns = [
    path('articles/6/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
    ]

    
    
    测试:
    url(r'^book/[0-9]{2,4}/$',views.book) 正则中表示0-9/2-4位的数字

     

    分组命名匹配

     在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。

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

    下面是以上URLconf 使用命名组的重写:


    分组匹配测试:
    url(r'^book/([0-9]{2,4})/([a-zA-Z]{2})/$',views.book)

     报错说明:book相当于现在要接受一个位置参数,但是现在给了3个,在做分组匹配时就会把分组里的值传个book

     

     

     

    这个实现与前面的相同,只有一个细微的差别:捕获的值作为关键字参数而不是位置参数传递给视图函数。

     

    命名URL和URL反向解析

    在使用Django 项目时,一个常见的需求是获得URL的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。
    人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。
    换句话讲,需要的是一个DRY 机制。除了其它有点,它还允许设计的URL 可以自动更新而不用遍历项目的源代码来搜索并替换过期的URL。
    获取一个URL 最开始想到的信息是处理它视图的标识(例如名字),查找正确的URL 的其它必要的信息有视图参数的类型(位置参数、关键字参数)和值。
    Django 提供一个办法是让URL 映射是URL 设计唯一的地方。你填充你的URLconf,然后可以双向使用它:

    • 根据用户/浏览器发起的URL 请求,它调用正确的Django 视图,并从URL 中提取它的参数需要的值。
    • 根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。

    第一种方式是我们在前面的章节中一直讨论的用法。第二种方式叫做反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查。
    在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:

    • 在模板中:使用url模板标签。
    • 在Python 代码中:使用django.core.urlresolvers.reverse() 函数。
    • 在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法。

    上面说了一大堆,你可能并没有看懂。(那是官方文档的生硬翻译)。

    咱们简单来说就是可以给我们的URL匹配规则起个名字,一个URL匹配模式起一个名字。

    这样我们以后就不需要写死URL代码了,只需要通过名字来调用当前的URL。

     

    Request对象和Response对象

    request对象

    当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。
    Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

    官方文档

    请求相关的常用值

    • path_info     返回用户访问url,不包括域名
    • method        请求中使用的HTTP方法的字符串表示,全大写表示。
    • GET              包含所有HTTP  GET参数的类字典对象
    • POST           包含所有HTTP POST参数的类字典对象
      • body            请求体,byte类型 request.POST的数据就是从body里面提取到的
  • 相关阅读:
    Maidsafe-去中心化互联网白皮书
    The Top 20 Cybersecurity Startups To Watch In 2021 Based On Crunchbase
    Top 10 Blockchain Security and Smart Contract Audit Companies
    The 20 Best Cybersecurity Startups To Watch In 2020
    Blockchain In Cybersecurity: 11 Startups To Watch In 2019
    004-STM32+BC26丨260Y基本控制篇(阿里云物联网平台)-在阿里云物联网平台上一型一密动态注册设备(Android)
    涂鸦开发-单片机+涂鸦模组开发+OTA
    000-ESP32学习开发-ESP32烧录板使用说明
    03-STM32+Air724UG远程升级篇OTA(阿里云物联网平台)-STM32+Air724UG使用阿里云物联网平台OTA远程更新STM32程序
    03-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32+Air724UG实现利用http/https远程更新STM32程序(TCP指令,单片机程序检查更新)
  • 原文地址:https://www.cnblogs.com/sseban/p/10335155.html
Copyright © 2011-2022 走看看