• django路由层学习


    无名分组与有名分组

    1.无名分组

    urls.py文件
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
     url(r'^admin/', admin.site.urls),
    下述正则表达式会匹配url地址的路径部分为:article/数字/,匹配成功的分组部分会以位置参数的形式传给
    视图函数,有几个分组就传几个位置参数
     url(r'^aritcle/(d+)/$',views.article),
    ]
    
    
    views.py文件
    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    需要额外增加一个形参用于接收传递过来的分组数据
    def article(request,article_id):
     return HttpResponse('id为 %s 的文章内容...' %article_id)
    
    
    测试:
    python manage.py runserver 8001 # 在浏览器输入:http://127.0.0.1:8001/article/3/ 会看到: id
    为 3 的文章内容...
    

    2.有名分组

    urls.py文件
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
     url(r'^admin/', admin.site.urls),
     该正则会匹配url地址的路径部分为:article/数字/,匹配成功的分组部分会以关键字参数(article_id=
    匹配成功的数字)的形式传给视图函数,有几个有名分组就会传几个关键字参数
     url(r'^aritcle/(?Pd+)/$',views.article),
    ]
    
    views.py文件
    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    需要额外增加一个形参,形参名必须为article_id
    def article(request,article_id):
     return HttpResponse('id为 %s 的文章内容...' %article_id)
    测试:
    python manage.py runserver 8001 # 在浏览器输入:http://127.0.0.1:8001/article/3/ 会看到: id
    为 3 的文章内容...
    

    总结:有名分组和无名分组都是为了获取路径中的参数,并传递给视图函数,区别在于无名分组是以位置参数的形式传递,有名分组是以关键字参数的形式传递。
    无名分组和有名分组不要混合使用

    反向解析

     根据某一个东西 动态解析出一个结果 该结果可以直接访问对应的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})
        
    用无名分组或者有名分组+反向解析 完成数据的编辑功能 
            url(r'^edit_user/(d+)/',views.edit_user,name='edit')
    
            user_queryset = models.User.objects.all()
    
            {% for user_obj in user_queryset %}
                <td>
                    <a href="{% url 'edit' user_obj.pk %}">编辑</a>
                    <a>删除</a>
                </td>
            {% endfor %}
    
    
            def edit(request,edit_id):
                pass
        
        
        注意 反向解析的别名 一定不要重复 
    

    路由分发

    django里面的app可以有自己的static文件,templates文件夹,urls.py(******)   
    项目名下面的urls.py不再做路由与视图函数对应关系而是做一个中转站,只负责将请求分发到不同的app中然后在app的urls.py完成路由与视图函数的对应关系
        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'))
            
            print(reverse('app01:index'))
            print(reverse('app02:index'))    
        
        通常情况下 起别名的时候 前面可以加上你的应用名    
    

    伪静态

    伪静态的目的是为了将动态网页假装成是静态的,这样做的目的是为了提高搜索引擎的SEO查询优先级,搜索引擎在收录网站的时候,会优先收录看上去像是静态文件的资源.

    但是无论怎么使用伪静态进行优化,也干不过RMB玩家

    虚拟环境

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

    django版本区别

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

  • 相关阅读:
    【Lua】Lua脚本及在Redis中的使用
    【php】php实现数组分块
    【git】git常用命令
    【PHP】php分隔字符串为数组
    【MYSQL】Mysql常用语句及命令
    键盘删除键长按只能删除一个字符,因为开启了键盘筛选键功能,解决方法
    JAVA基础知识总结:五
    linux常见命令
    JAVA基础知识总结:六
    写一个类时什么时候需要重写toString
  • 原文地址:https://www.cnblogs.com/aden668/p/11722195.html
Copyright © 2020-2023  润新知