zoukankan      html  css  js  c++  java
  • day 58 无名分组与有名分组,反向解析,路由分发,名称空间,伪静态,虚拟环境,django版本区别、orm中创建表与表之间的关系、django请求生命周期流程图

    无名分组和有名分组

     #路由匹配
     url第一个参数是正则

    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # url(r'^$', views.home), # 首页
    # url(r'^index/', views.index),
    # url(r'^test/$', views.test),
    # url(r'testadd/', views.testadd),
    # url(r'',views.errors) # 404页面,要放在所有url之后
    # 无名分组
    # url(r'^test/(d+)/', views.test),
    # 有名分组
    # url(r'^test/(?P<month>d+)/', views.test),
    # 有名无名不可以结合使用
    # url(r'^test/(d+)/(?P<month>d+)/', views.test),
    # 有名无名单独使用的情况下 可以用多个
    # url(r'^test/(d+)/(d+)/', views.test),
    # url(r'^test/(?P<xxx>d+)/(?P<month>d+)/', views.test),
    # url(r'^test_addsajdsjkahdkjasjkdh/(d+)/', views.testadd,name='xxx'),
    # url(r'^test_addsajdsjkahdkjasjkdh/(?P<year>d+)/', views.testadd,name='xxx'),



    反向解析
    根据url的别名,动态解析出对应的url

    #正常情况

    url(r'^test_add/', views.testadd,name='xxx')

    前端解析
    {% url 'xxx' %}

    后端解析
    from django.shortcuts import render,HttpResponse,redirect,reverse
    url = reverse('xxx')


    #无名分组反向解析
    url(r'^test_addsajdsjkahdkjasjkdh/(d+)/', views.testadd,name='xxx'),

    前端解析
    <a href="{% url 'xxx' 1 %}">222</a>

    后端解析
    url = reverse('xxx',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,))
    url = reverse('xxx',kwargs={'year':123})


    注意:反向解析的别名 一定不要重复

     

    #views.py

     

    from django.shortcuts import render,HttpResponse,redirect,reverse

     

    def index(request):
    url = reverse('xxx',args=(1,)) #“url”中有无名分组的情况,要告诉url正则表达式中的参数是什么
    print(url)
    return HttpResponse('testadd')

    def index(request):
    # print(reverse('app01:index'))
    print(reverse('app01_index'))
    return HttpResponse('我是app01下面的index')

    def testadd(request,year):
    # url = reverse('xxx',args=(1,))
    url = reverse('xxx',kwargs={'year':123}) # “url”中有名分组的情况,标准的是传kwargs但是也可以穿args
    print(url)
    return HttpResponse('testadd')

    #使用include
     from django.conf.urls import url,include
     给路由与视图函数对应关系 起一个别名  后续根据这个别名 就能够动态解析出所对应的url
    第一种:麻瓜式
    from app01 import urls as app01_urls
    from app02 import urls as app02_urls
     url(r'^app01/',include(app01_urls)), #起别名时人为加上app名前缀
    url(r'^app02/',include(app02_urls))
    第二种
    url(r'^app01/',include('app01.urls')),
    url(r'^app02/',include('app02.urls'))
    # url(r'^app01/',include('app01.urls',namespace='app01')), #使用namespace以后,使用reverse时,会有提示app01:index
    # url(r'^app02/',include('app02.urls',namespace='app02'))


    路由分发(******)

    django里面的app可以有自己的static文件,templates文件夹,urls.py(******)

    
    

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

    # 1.在应用下自己手动创建urls.py

    from django.conf.urls import url
    from app01 import views

    urlpatterns = [
    url(r'^index/',views.index,name='app01_index')
    ]


    #  2.在路由中导入  给路由与视图函数对应关系 起一个别名 后续根据这个别名 就能够动态解析出所对应的url

    from django.conf.urls import url,include

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

    名称空间
    总路由
    url(r'^app01/',include('app01.urls',namespace='app01'))
    url(r'^app02/',include('app02.urls',namespace='app02'))

    # app01 urls.py
    url(r'^index/',views.index,name='index')
    # app02 urls.py
    url(r'^index/',views.index,name='index')

    url = reverse('app01:index')
    url = reverse('app02:index')

    <a href="{% url 'app01:index' %}">222</a>

    <a href="{% url 'app02:index' %}">222</a>



    #通常情况下 起别名的时候 前面可以加上你的应用名
    # app01 urls.py
    url(r'^index/',views.index,name='app01_index')
    # app02 urls.py
    url(r'^index/',views.index,name='app02_index')







    伪静态
    将动态网页假装成是静态的,这样做的目的是为了提高搜索引擎的SEO查询优先级
    搜索在收录网站的时候 会优先收录看上去像是静态文件的资源,但是无论你怎么使用伪静态进行优化 你也干不过RMB玩家

    
    

    虚拟环境
    通常针对不同的项目 只会安装该项目所用的模块 用不到的一概不装
    不同的项目有专门的解释器环境与之对应
    每创建一个虚拟环境 就类似于重新下载了一个纯净的python解释器
    虚拟环境不要创建太多个




    django版本区别
    django1.x
    django2.x

    区别1:
    urls.py中1.x用的是url,而2.x用的是path
    并且2.x中的path第一个不支持正则表达式,写什么就匹配什么
    如果你觉得不好用,2.x里面还有re_path 这个re_path就是你1.x里面的url

    提供五个默认的转换器
    还支持用户自定义转换器

    orm中创建表与表之间的关系

    #一对多
    一对多外键字段应该建在多的那一方
    models.ForeignKey(to='关联的表名') # 自动建关系 默认就是跟关联表的主键字段
    ForeginKey字段在创建的时候 orm会自动在字段后面加_id

    #多对多
    ManyToManyField(to='关联的表名') # 并不会创建一个实际字段 仅仅是用来告诉django orm自动创建第三张表


    #一对一
    OneToOneField(to='关联的表名')
    OneToOneField字段在创建的时候 orm会自动在字段后面加_id

    django请求生命周期流程图

  • 相关阅读:
    Python 循环语句
    Python if、elif 、else语句 与 布尔运算
    Python 运算符
    Python 标识符
    Python 常用数据类型(整数,浮点数,复数,布尔型)
    Python 编辑器内容
    Python 语言介绍
    vscode 最新中文设置
    漫画数据库_基础和设计数据库
    linux配置服务器
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11722189.html
Copyright © 2011-2022 走看看