路由匹配

  1. url(r'test',views.test),
  2. url(r'testadd',views.testadd),
  3. 以这种方法书写则只会执行test视图函数,不会去执行testadd,因为url的第一个参数是正则匹配,匹配成功后不会继续匹配,直接执行对应的视图函数
  4. url(r'test/',views.test),
  5. url(r'testadd/',views.testadd)
  6. 以这种方式书写则会执行testadd视图函数,当在浏览器输入test时候不会匹配成功,django内部重定向,在url后面加/
  7. settings内取消自动加/
  8. APPEND_SLASH = False
  9. url(r'^$',views.home),首页

无名有名分组

分组:用小括号将某一段正则包含在内

无名

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

def test(request,a):
    print(a)
    return HttpResponse('test')

无名分组就是将括号内正则匹配到的当做位置参数传递给后面的视图函数

有名

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

def test(request,a):
    print(a)
    return HttpResponse('test')

有名分组就是将括号内正则匹配到的当做关键字参数传递给后面的视图函数

无名和有名不能混用,但是同一个分组能多次使用

反向解析

前端反向解析

url(r'^test/$',views.test,name='qqq'),
<a href="{% url 'qqq' %}"></a>

后端方向解析

from django.shortcuts import render, redirect, HttpResponse,reverse
reverse('qqq')

无名分组反向解析

后端解析
def index(request,edit_id):
    reverse('xxx',args=(edit_id,))

前端解析    
url(r'^test/$',views.test,name='qqq'),
<a href="{% url 'qqq' edit_id %}"></a>

有名分组方向解析
有名分组方向解析写法可以和无名分组一样

路由分发

总路由

写法一

from django.conf.urls import include,url
from django.contrib import admin
from app01 import urls as app01_urls
from app02 import urls as app02_urls
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app01/',include(app01_urls)),
    url(r'^app02/',include(app02_urls)),
]


写法二

from django.conf.urls import include,url
from django.contrib import admin
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'app01/',include('app01.urls')),
    url(r'app02/',include('app02.urls'))
]

推荐第二种写法

总路由正则后面不能加$符,否则无法继续匹配

子路由

from django.conf.urls import url
from app01 import views
urlpatterns = [
    url(r'reg/',views.reg)
]

from django.conf.urls import url
from app02 import views
urlpatterns = [
    url(r'reg/',views.reg)
]

名称空间

多个应用出现相同路由名称,正常情况下是没有办法自动识别前缀的

from django.conf.urls import include,url
from django.contrib import admin
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'app01/',include('app01.urls',namespace='app01')),
    url(r'app02/',include('app02.urls',namespace='app02'))
]

加上namespace,反向解析的时候就能识别

伪静态概念

将一个动态网页伪装成静态网页
目的:增大网站的SEO查询力度
增加搜索引擎收藏网站的概率

总结:无论怎么优化,都抵不过RMB玩家

虚拟环境

类似于一个单独的解释器环境
image.png

django版本区别

区别一:
1.x中,路由层是用的url方法,2.x和3.x中使用的是path方法
url的第一个参数是支持正则匹配的
path的第一个参数是精准匹配
re_path支持正则,等价于url
2.x和3.x中不推荐使用 url方法

区别二:
path内部有五个转换器,同时也支持自定义转换器

区别三:
模型层中1.x中外键默认级联更新和删除
2.x和3.x中需要手动配置