Django视图层

路由匹配

urls.py

url()方法第一个参数其实是一个正则表达式
第一个参数只要能够匹配到内容就算是符合匹配条件直接停止匹配执行视图函数


# 路由匹配
url(r'^test/$',views.test),
url(r'^testadd/$',views.testadd)

# 取消自动加斜杠(默认为True)
APPEND_SLASH = False

无名有名分组

# 无名分组
在路由匹配的时候如果给正则表达式加上了括号
那么匹配到路由之后会将括号内正则表达式匹配的到内容当做位置参数传递给视图函数
url(r'^test/(\d+)/(\d+)/',views.test)  # test(request,正则匹配的内容)

# 有名分组
在路由匹配的时候如果给正则表达式加上了括号并且命名
那么匹配到路由之后会将括号内正则表达式匹配的到内容当做关键字参数传递给视图函数
url(r'^testadd/(?P<user_id>\d+)/',views.testadd)  # testadd(request,user_id=正则匹配的内容)

# 无名分组和有名分组不能结合使用!!!
# 单独情况可以重复多次,只需要形参对应上就行

反向解析

# 通过别名反向解析到一个结果,该结果可以访问发到对应的视图函数
url(r'^index/',views.test,name='index_view'),
前端页面方向解析
	{% url 'index_view'%}
后端流程反向解析
	from django.shortcuts import render, HttpResponse, redirect, reverse
	def func(request):
        # 第一种
    	_url = reverse('index_view')
    	print(_url)
    	return redirect('/index/')
        # 第二种
    	return redirect('index_view')  # 还可以直接写别名
    
# 起别名不能冲突

有名无名反向解析

# 无名反向解析
url(r'^login/(\d+)/',views.login,name='login_view')
reverse('login_view',args=(1,))
{% url 'login_view' 1 %}
# 数字只要能够让\d+匹配到就可以 在实际项目中一般都是动态获取

# 有名反向解析
url(r'^reg/(?P<user_id>\d+)/',views.reg,name='reg_view')
reverse('reg_view',kwargs={'user_id':666})
{% url 'reg_view' user_id=123 %}

反向解析实战演练

项目需求:反向解析完成用户的编辑与删除

编辑功能
	1.选开设一个编辑数据的url接口
	2.思考如何携带用户想要编辑的数据的主键值
    	有名分组 
    3.查询出用户想要编辑的数据展示给用户看
删除功能
	1.思考如何携带用户想要编辑的数据的主键值
    	无名分组 
    2.获取数据主键值并删除

路由分发

当Django的APP特别多的时候,一个urls.py文件太过冗余
在Django中的每一个APP都可以拥有自己的urls.py static文件夹 templates文件夹

路由分发
	总路由不再做url与视图函数直接匹配
    而是先根据url分辨出请求哪个业务
    之后分配给下面的APP再去匹配视图函数
    
复杂版本
from app01 input urls as app01_urls
from app02 input urls as app02_urls
url(r'^app01/',include(app01_urls)),
url(r'^app02/',include(app02_urls)),
简化版本
url(r'^app01/',include('app01.urls')),
url(r'^app02/',include('app02.urls')),

空间名称

多个应用在反向解析的时候出现了别名冲突的情况
django是无法做到一一对应的		>>>名称空间

url(r'^app01/',include('app01.urls',namespace='app01')),
url(r'^app02/',include('app02.urls',namespace='app02')),
reverse('app01:index_view')
reverse('app02:index_view')
{% url 'app01:index_view' %}
{% url 'app02:index_view' %}

# 名称空间其实也可以不需要使用
只需要确保多个应用之间别名也不冲突的情况
	eg:起别名的时候加上应用名前缀

伪静态页面

静态页面
	页面上的数据一般都是直接写死的
伪静态页面
	目的是为了提升网页被SEO查询出来的概率
 
如何优化都干不过RMB玩家
"""所有的搜索引擎都是爬虫程序"""

虚拟环境

针对不同的项目配置专属的解释器环境
	项目1
    	pymysql
        django
    项目2
    	flask
        jinja2
    项目3
    	tornado
        websocket
虚拟环境
	能够在一台计算机上给不同的项目配置专属的解释器环境

posted @ 2021-06-30 20:23  zheng-sn  阅读(17)  评论(0)    收藏  举报