• Django框架——路由(urls)层


    无名分组与有名分组

    无名分组

    对于正则加括号,会将括号内匹配到的内容当做位置参数传递给后面的视图函数test(request,args)

    eg:

    url(r'^test/(d+)/',views.test)

    有名分组

    就是给正则起个别名

    会将括号内匹配到的内容当做关键字参数传递给后面的视图函数test(request,month=123)

    这个month也可以是其他值

    eg:

    url(r'^test/(?P<month>d+)/',views.test)

    注意

    有名分组和无名分组不能结合使用,但是无名和有名分组单独使用的情况下可以使用多次,就是一个里面有多个分组

    eg:

    url(r'^test/(d+)/(d+)/',views.test)
    url(r'^test/(?P<month>d+)/(?P<month>d+)/',views.test)

    反向解析

    根据某一个东西,动态解析出一个结果,该结果可以直接访问对应的url

    怎么去做呢?

    答:给路由与视图函数对应关系起一个别名,后续根据这个别名就能够动态解析出对应的url

    eg:

    url(r^test_add/',testadd)

    前段解析

    {%url 'xxx' %}

    后端解析

    导入模块

    import revers
    url = revers('xxx')

    无名分组反向解析

    url(r'^test_addsajdsjkahdkjasjkdh/(d+)/', views.testadd,name='xxx')

    前段解析

    在模版login.html文件中,反向解析的使用
        <a href="{% url 'xxx' 1 %}">222</a>

    后端解析

    在views.py中,反向解析的使用:
        url = reverse('xx',args=(1,)) 

    有名分组的反向解析

    url(r'^test_addsajdsjkahdkjasjkdh/(?P<year>d+)/', views.testadd,name='xxx')

    前段解析

    <a href="{% url 'xxx' 1 %}">222</a>
    <a href="{% url 'xxx' year=1 %}">222</a>

    后端解析

    url = reverse('xxx',args=(1,))

    路由分发

    eg:Django有100个app,那urls里面的代码过于冗长

    Django里面的APP可以有自己的templates文件夹,static文件夹,和urls.py文件

    总路由项目名下的urls.py不再做路由与视图函数对应关系了,而是做一个中转站,只负责将请求分发到不同的app中,在app中做视图函数的对应关系

    具体操作:

    from django.conf.urls import url,include
    
    url(r'^app01/',include(app01_urls)),
    url(r'^app02/',include(app02_urls))

    名称空间

    当我们的项目下创建了多个app,并且每个app下都针对匹配的路径起了别名,如果别名存在重复,那么在反向解析时则会出现覆盖,但是我们尽量不要重名

    总路由

    url(r'^app01/',include('app01.urls',namespace='app01'))
    url(r'^app02/',include('app02.urls',namespace='app02'))

    各个app的路由

    print(reverse('app01:index'))
    print(reverse('app02:index'))

    伪静态

    将动态网页假装成是静态的,这样做的目的是为了提高百度等搜索引擎的SEO查询优先级

    搜索引擎在收录网站的时候,会优先手撸看上去像是静态文件的资源

    无论你怎么使用伪静态进行优化,都干不过RMB玩家

    哈哈哈!!!

    虚拟环境

    通常针对不停地项目,只会安装该项目所用到的,用不到的一概不装

    不同的项目有专门的解释器环境与之对应

    每创建一个虚拟环境,就类似于重新下载了一个python解释器

    实际功能中针对不同而项目,有一个交叫requestments.txt,该文件列出来的是一个个该项目需要用到的模块名和版本号
    eg:
    Django=1.11.11
    nginx
    后期会通过命令直接会去下载该文件内所有的模块及对应的版本

    虚拟环境不要创建太多个,会占硬盘资源的操作

    Django1版本和Django2 版本的区别

    Django1.x

    区别一:

    urls.py中1.x用的是url,2.x用的是path

    2.x中的第一个参数不支持正则表达式,些写什么就匹配什么

    2.x里面还有re_path,这个re_path就好比1.x中的url

    区别二:

    django2.x默认支持一下5种转换器(Path converters)

    str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
    int,匹配正整数,包含0。
    slug,匹配字母、数字以及横杠、下划线组成的字符串。
    uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
    path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

    例如

    path('articles/<int:year>/<int:month>/<slug:other>/', views.article_detail) 
    # 针对路径http://127.0.0.1:8000/articles/2009/123/hello/,path会匹配出参数year=2009,month=123,other='hello'传递给函数article_detail
  • 相关阅读:
    linux内核主要模块图
    进程的用户栈和内核栈
    Linux0.11内核几种地址(逻辑地址、线性地址、物理地址)的含义
    实模式与保护模式
    Linux多线程与同步
    java+selenium——鼠标左击
    java+selenium——键盘操作+复制粘贴(keys类)
    java+selenium——语法简介
    java+selenium——鼠标悬停从一个位置移动到另外一个位置
    java+selenium——简单截图+保存在java工程目录下=====简单截图+时间+保存在java工程目录下
  • 原文地址:https://www.cnblogs.com/lulingjie/p/11766232.html
Copyright © 2020-2023  润新知