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请求生命周期流程图

  • 相关阅读:
    hdu2328 Corporate Identity
    hdu1238 Substrings
    hdu4300 Clairewd’s message
    hdu3336 Count the string
    hdu2597 Simpsons’ Hidden Talents
    poj3080 Blue Jeans
    poj2752 Seek the Name, Seek the Fame
    poj2406 Power Strings
    hust1010 The Minimum Length
    hdu1358 Period
  • 原文地址:https://www.cnblogs.com/wwei4332/p/11722189.html
Copyright © 2011-2022 走看看