• Django之路由分发系统


    web的基本工作流程

    首先,我们先来思考一下我们平常在上网浏览网页时候的场景,大致就是打开一个web浏览器,输入某一个网站的地址,然后转到该网址,在浏览器中得到该网址的页面。从这个场景中我们可以抽象出来几个基本对象,我们(用户)、web浏览器(客户端)和发送过来页面的地方(服务端),这些对象其实就是整个web工作流程中的重要组成部分。

    为了加强理解,其实可以将这个工作流程看做去吃饭时点餐的流程,web浏览器就是服务员,而服务端就是厨房。你给服务员说你要点什么菜,然后服务员将你点的菜端上来,具体厨房里是怎么忙活的也并不知道,其实web服务器就相当于厨师,有着各种各样的技能,根据你的成菜要求,为你进行服务,数据库在这里可以认为是个菜窖,需要什么菜去拿什么菜。

    django工作基本流程

    1. 客户端发送请求(get/post)  经过web服务器、中间件、到达路由分发系统
    2. 路由分发系统根据request中携带的url路径(path)与识图函数映射关系,匹配到1个视图函数,并且执行视图函数
    3. 在视图函数中,如果有关数据库相关的操作,通过原生SQL或ORM从数据库获取数据,然后渲染到模板,生成一个html文件,如果没有就直接返回一个html文件
    4. 在视图函数最后 return一个HTTPresponse对象,这个对象携带我们生成的模板文件,返回到客户端,渲染到页面。

    django路由分发系统简介

    Django项目目录中的urls.py文件中,以python列表中嵌套元祖的形式记录了视图函数与url路径的映射关系,当一个客户端的请求到达路由系统,通过请求体获取用户请求路径,然后通过正则在

    urlpatterns列表中自上而下逐个匹配,如果匹配成功,就会执行相应的视图函数。如果有一个以上的匹配成功,只会执行urlpatterns中最靠前的项。
    from wsgiref.simple_server import make_server
    
    # Create your views here.
    def index(request):
        return [b'hello']
    
    def routers():
        return [('/index/',index),]
    
    def application(environ,start_response):
        start_response('200 OK', [('Content-Type', 'text/html')])
        path=environ.get('PATH_INFO')
        urloattern=routers()
        func=None
        for i in urloattern:
    
            if path==i[0]:
                func=i[1]
                break
        if func:
            return func(environ)
        else:
            return [b'404']
    if __name__ == '__main__':
        t=make_server('',8000,application)
        t.serve_forever()
    简易路由系统

    客户端通过url向后端传递参数

    在前端我们不仅可以通过get请求携带参数的方式向服务端传数据;

    https://127.0.0.1/index/?id=1&name=alex

    Django也允许通过,path路径的方式向server端传值;

    注意事项:按位置,和按关键字路由系统只能用1种,不能混合使用;

    1 path 正则无名分组匹配----->视图函数按位置传递参数

    按位置传参形参或实参错位会导致数据错乱,所以Django路由分发系统还可以以命名分组的形式匹配URL给视图函数按关键字传参;

    from django.conf.urls import url,includefrom app1 import views
    urlpatterns = [
     url(r'^index/(P<n1>w+)/(P<n2>w+)/',views.index,name="index"),
     ] #注意如果在路由系统正则内部定义了关键字n1,n2,视图函数接收参数也必须是 n1,n2;

    #在视图函数定义2个关键字参数, 接收 2个正则表达式匹配到的后缀; def index(request,n1,n2): print(n1,n2) #注意必须和 路由系统中的一致 return HttpResponse('OK')

    2、URL path传值应用

    有了动态路由就 可以不用在  url?nid=8这样传值了!

    终止符:^edit$  可以精确限制匹配URL的后缀内容
    伪静态:url(r'^edit/(w+).html$', views.edit)  装作成静态网站的url可以 提高 SEO高权重   百度排名靠前

    url(r'^student_del/(.*).html/',views.student_del),
    <a href="/student_del/{{row.id}}.html/">删除</a></td>
  • 相关阅读:
    Https协议详解
    python3爬虫之入门和正则表达式
    浅谈httpsssl数字证书
    Linux常见配置文件
    标准C++中的string类的用法总结
    SourceInsight中 加namespace宏后,无法跳转问题解决
    ubuntu 12.04安装vmtools 问题解决
    Prolific PL2303 usb 转串口Win8 Win8.1驱动
    大津法阈值法代码
    opencv常用函数备忘
  • 原文地址:https://www.cnblogs.com/richiewlq/p/8033476.html
Copyright © 2020-2023  润新知