首页 > 其他 > 详细

04:Django(路由层完+视图层部分)

时间:2021-05-21 23:49:18      阅读:24      评论:0      收藏:0      [点我收藏+]

昨日内容回顾

  • django orm表关系创建

    1.表关系判断
    2.orm外键字段创建
    """
    to后面既可以写字符串也可以直接写类名
    如果直接写类名一定要确保该类出现在代码的上方
    """
    models.ForeignKey(to=‘表名‘)
    models.OneToOneField(to=‘表名‘)
      上述两个自动加_id后缀
       models.ManyToManyField(to=‘表名‘)
    虚拟字段自动创建第三张关系表
  • django请求生命周期流程图

    浏览器
    web服务网关接口
    wsgiref模块 uwsgi模块  WSGI协议
    django后端
    django中间件
       路由层
       视图层
       模板层
       模型层
    关系型数据库
    缓存数据库
  • 路由层之路由匹配

    url(正则表达式,函数内存地址)
    ?
    1.路由匹配的本质
    只要能够匹配到内容就算符合规则
       直接执行对应的视图函数
    2.自动添加斜杠
    django后端重定向
       APPEND_SLASH = True
  • 无名分组

    给正则表达式加括号分组
    匹配到内容之后会将括号内正则表达式匹配到的内容当做位置参数传递给视图函数
    url(r‘^index/(\d+)/‘,views.index)  # index(request,内容)
  • 有名分组

    给正则表达式加括号并且起别名分组
    匹配到内容之后会将括号内正则表达式匹配到的内容当做关键字参数传递给视图函数
    url(r‘^index/(?P<user_id>\d+)/‘,views.index)  # index(request,user_id=内容)
  • 补充

    无名有名不能混合使用
    单个情况下可以重复使用
  • 反向解析

    """
    先给路由匹配起别名 之后根据别名反向解析出一个结果
    该结果可以匹配到对应的url并执行视图函数
    """
    url(r‘^login/‘,views.login,name=‘login_view‘)
    前端
    {% url ‘login_view‘ %}
    后端
    from django.shortcuts import reverse
       url = reverse(‘login_view‘)
       redirect(‘login_view‘)

今日内容概要

  • 无名有名反向解析

  • 路由分发(分组开发)

  • 名称空间(了解)

  • 伪静态页面

  • 虚拟环境(实际开发使用较多)

  • 视图层(三板斧、JsonResponse、form表单、CBV)

今日内容详细

无名有名反向解析

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 %}
?
"""无论是无名分组还是有名分组的反向解析都可以使用一样的格式"""
url(r‘^reg/(?P<user_id>\d+)/‘,views.reg,name=‘reg_view‘)
reverse(‘reg_view‘,args=(123,))
{% url ‘reg_view‘ 123 %}

反向解析实战演练

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

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

路由分发

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

路由分发
	总路由不再做url与视图函数直接匹配
    而是先根据url分辨出请求哪个业务
    之后分配给下面的app再去匹配视图函数
 	
复杂版本
from app01 import urls as app01_urls
from app02 import 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
虚拟环境
	能够在一台计算机上给不同的项目配置专属的解释器环境

django版本区分

django1.X与django2.X、django3.X区别
1.路由层
	1.X使用的url方法
    2.X和3.X使用的path方法
    ‘‘‘url第一个参数是正则表达式 path第一个参数不支持正则‘‘‘
    from django.urls import path,re_path
    ‘‘‘如果还想使用正则 可以考虑re_path与url一模一样‘‘‘
    
    path还支持五种默认的转换器(自动帮你转换数据类型)
    并且还支持自定义转换器
    str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
    int,匹配正整数,包含0。
    slug,匹配字母、数字以及横杠、下划线组成的字符串。
    uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
    path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
    
    class MonthConverter:
        regex=‘\d{2}‘ # 属性名必须为regex

        def to_python(self, value):
            return int(value)

        def to_url(self, value):
            return value # 匹配的regex是两个数字,返回的结果也必须是两个数字数字
     
    register_converter(MonthConverter,‘mon‘)

    from app01 import views


    urlpatterns = [
        path(‘articles/<int:year>/<mon:month>/<slug:other>/‘, views.article_detail, name=‘aaa‘),

    ]
    
2.模型层
	1.X模型层创建外键的时候默认就是级联更新级联删除
    2.X和3.X需要通过参数自己指定

视图层

1.小白必会三板斧
	HttpResponse
    render
    redirect
    # 视图函数必须返回一个HttpResponse对象
 
2.JsonResponse
	# 锻炼思维
	    import json
        from django.http import JsonResponse


        def index(request):
            d = {"username":‘jason高大威武‘,‘password‘:123}
            # res = json.dumps(d,ensure_ascii=False)
            # return HttpResponse(res)
            l = [11,22,33,44,55]
            # return JsonResponse(d,json_dumps_params={‘ensure_ascii‘:False})
            return JsonResponse(l,safe=False)

作业

1.利用反向解析完成用户数据的增删改查
2.自行百度模型层区别、同步异步框架
	利用2或者3版本做表关系创建
3.拔高题
    from datetime import datetime
    import json
    # 自己写一个类 替换掉cls
    d = {‘t1‘:datetime.today()}
    res = json.dumps(d)
    print(res)

 

04:Django(路由层完+视图层部分)

原文:https://www.cnblogs.com/chijintao/p/14797455.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!