<address id="rf17h"><dfn id="rf17h"></dfn></address>
    <address id="rf17h"><var id="rf17h"></var></address> <sub id="rf17h"><var id="rf17h"><ins id="rf17h"></ins></var></sub><address id="rf17h"></address>

    <address id="rf17h"><listing id="rf17h"><ins id="rf17h"></ins></listing></address>

    <sub id="rf17h"><var id="rf17h"></var></sub>
    <sub id="rf17h"><var id="rf17h"><output id="rf17h"></output></var></sub>

      <address id="rf17h"></address>
      <sub id="rf17h"><var id="rf17h"></var></sub>
          <sub id="rf17h"><dfn id="rf17h"><ins id="rf17h"></ins></dfn></sub>

          Django urls.py

          urls.py 路由与视图关系对应函数 - > 路由层

          无名分组和有名分组

          1. 什么是无名分组和有名分组
            就是可以直接拿到链接后面携带的参数,也就是urls.py中括号内匹配到的参数传递给后端的对应的函数里面.

          2. 无名分组
          # 前端
          <a href="/index/content"></a>
          
          
          # urls.py ==> 在这里 content是括号里面\d+正则匹配的数据
          url(r'^index/(\d+)',views.index)
          
          
          # views.py
          def index(request,任意参数)
              print(任意参数)  -> 打印结果: content
              ...
          1. 有名分组 - 其实就是价格名字,后端要用同样的名字接收
          # 前端
          和上面一样
          
          
          # urls.py
          url(r'^index/(?P<和后端一样的名字>\d+)',views.index)
          
          
          # views.py
          def index(request,和后端一样的名字):
              print(和后端一样的名字) -> 打印结果: content
              ...
          1. 有名分组和无名分组不可以一起使用,可以重复使用

          反向解析

          前端的访问地址,会随着我后端的urls.py中的地址的变化而变化,使该结果可以直接访问对应的url

          # 前端
          <a href="{% url 'name名字' %}"></a> -> url这个单词是固定的
          
          
          # urls.py
          url(r'^index/',views.index, name='name名字')
          
          
          # views.py
          from django.shortcuts import render, HttpResponse, redirect,reverse
          
          def index(request):
              print(reverse('name名字'))
              ...
           
          # 这样后端也能实时的获取到修改后的访问地址,前端也不需要去修改 ,后端也不需要去修改.

          反向解析+无名分组

          # 前端
          <a href="{% url 'name名字' 数值 %}"></a> -> url这个单词是固定的
              通常 数值 是主键
              
              
          # urls.py
          url(r'^index/(\d+)',views.index, name='name名字')
          
          
          # views.py
          from django.shortcuts import render, HttpResponse, redirect,reverse
          
          def index(request,xx):
              print(xx) -> 返回值是 数值
              print(reverse('name名字',args=(123,))) -> 记住这样写
              ...
          
          # 反向解析的别名,一定不要重复

          反向解析+有名分组

          # 前端
          <a href="{% url '别名' 数值 %}"></a> -> url这个单词是固定的
              通常 数值 是主键
              
              
          # urls.py
          url(r'^index/(?P<year>\d+)',views.index, name='别名')
          
          
          # views.py
          from django.shortcuts import render, HttpResponse, redirect,reverse
          
          def index(request,xx):
              print(xx) -> 返回值是 数值
              print(reverse('别名',kwargs={'year': 123})) -> 记住这样写
              ...
              
          # 反向解析的别名,一定不要重复

          路由分发

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

          项目名下面的urls.py不在做路由与视图函数对应关系

          然后在app的urls.py完成路由与视图函数的对应关系

          项目名下的urls.py完成的是路由的分发

          1. 方式一
          # 总urls.py
          from app01 import urls as app01_users
          from app02 import urls as app02_users
          from django.conf.urls import url,include
          
          url(r'^app01/',include(app01_users))
          url(r'^app02/',include(app02_users))
          需要频繁导包,并且需要取别名,因为每个app下的urls.py文件名都是一样的
          
          2. 方式二
          # 总urls.py
          from django.conf.urls import url,include
          
          url(r'^app01/',include('app01.urls'))
          url(r'^app02/',include('app02.urls'))
          这种是通过字符串的方式,不需要导包,用到的模块是 importlib ,将我们写的字符串转化成导包的形式

          名称空间

          在我们分开开发app的时候,可能会出现取相同的别名,并且反向解析的时候是不会自动拼接上这个别名是那个app下面的,所以我们有两种方法去解决

          方式一:

          # 总urls.py
          from django.conf.urls import url,include
          
          url(r'^app01/',include(app01_users, namespace='app01'))
          url(r'^app02/',include(app02_users, namespace='app02'))
          
          这种方式就会在取别名的时候弹出来提示

          方式二:

          也不用很麻烦,就是取名字的时候默认自己拼接上app的名字

          伪静态

          就是改一下urls.py文件中的搜索的路由名字,加上.html,把我们的网页伪装成静态的,百度会优先收录,就可能排在前面了,提高了搜索引擎的SEO查询优先级

          但是---还是干不过人民币玩家

          虚拟环境

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

          相关文章
          相关标签/搜索
          每日一句
            每一个你不满意的现在,都有一个你没有努力的曾经。
          公众号推荐
             一个历史类的公众号,欢迎关注
          一两拨千金
          王中王中特免费公开资料选料