Django基础4

  • 无名有名反向解析
  • 路由分发(分组开发)
  • 名称空间(了解)
  • 伪静态页面
  • 虚拟环境(实际开发使用较多)
  • 视图层(三板斧、JsonResponse、form表单、CBV)

1.无名有名反向解析

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.获取数据主键值并删除

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')),

# 子路由还是按照之前总路由的写法

3.名称空间

多个应用在反向解析的时候出现了别名冲突的情况
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:起别名的时候加上应用名前缀

4.伪静态页面

静态页面
    页面上的数据一般都是直接写死的
伪静态页面
    目的是为了提升网页被SEO查询出来的概率

如何优化都干不过RMB玩家
"""所有的搜索引擎都是爬虫程序"""

5.虚拟环境

针对不同的项目配置专属的解释器环境
    项目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需要通过参数自己指定

6.视图层

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)
上一篇:Windows 8 IIS中配置PHP运行环境的方法


下一篇:创建Django3项目