zoukankan      html  css  js  c++  java
  • Django 第二课 2.【urlpatterns】

    urlpatterns 在url文件中是一个url映射列表。在1.8以后的django版本中可直接为列表形式或者也可以用patterns函数生成。在1.7及以前的版本中则是由patterns函数生成。系统会自动遍历url文件中的urlpatterns列表然后进行对应的处理函数查找。当url有重复的情况则以找到的第一个为准。

    先说说Django怎么处理请求:

    • 一旦生成url页面请求,请求传递到urls.py;
    • Django去urlpatterns中匹配链接(Django会在匹配到的第一个就停下来);
    • 一旦匹配成功,就会去执行,path后面的方法,Django便会给出相应的view页面(该页面可以为一个Python的函数,或者基于view(Django内置的)的类),也就是用户看到的页面;
    • 若匹配失败,则出现错误的页面。

    编写urlpatterns

    1.views中的简单函数
    #urls.py
        from app import views #这里的app是你自己的应用的名字
        from django.urls import path
        urlpatterns = [
                    path('index/', views.index, name='index'),
        ]

    该方法对应view.py中的函数为:

    #views.py
    def index(request):
        ...
        return render(request,'index.html')
    2.从views中继承的类
    #urls.py
        from app.views import LoginView
        from django.urls import path
        urlpatterns = [
                    path('login/', LoginView.as_view(), name='login'),
        ] 

    该方法对应的view.py中为:

    #views.py
    class LoginView(View):
        #请求为get时
        def get(self,request):
            ...
            return render(request, 'login.html')
        #请求为post时
        def post(self,request):
            ...
            return render(request,'login.html')

    当你从其他地方比如你的应用中也新建了一个文件叫urls.py,这是可以用第三种方法:

    3.导入其他的URL文件(适用于urls.py文件不止一个时)

     #urls.py(系统默认的)
        from django.urls import include, path
        urlpatterns = [
            path('login/', include('app.urls'))#假设自己新建的urls在app(应用中)
        ]

    再说urlpatterns   

    若觉得上述方法依然不够逼格,可以试试正则形式的urlpatterns,具体用法为

    导入包时由

    from django.urls import path

    更改为

    from django.urls import re_path

    相应的urlpatterns构造也变为

    urlpatterns = [
                    re_path(r'^articles/(?P<year>[0-9]{4})/$', view.year, name='article'),
                    re_path(r'^blog/(page-(d+)/)?$',blog_articles),
         ]   

    这样子可以很方便的匹配到具体某一年的文章,而不用对“每一年”都写一个path,这样子可以极大的减轻工作量。

    还有一种方法

    #urls.py
        from app.views import LoginView
        from django.conf.urls import url  #注意这里
        urlpatterns = [
                    url(r'^login/$', LoginView.as_view(), name='login'), #还有这里
        ] 

    总结:

    path方法适用于页面较少的网站,re_path可以利用正则表达的优势适用于较多的页面的网站

    匹配失败出现错误页面

    • handler400
    • handler403
    • handler404
    • handler500

    若有兴趣可以上官网看一下

    当你的项目上线时则需要对这些错误进行自己的定义,总不能人家去访问你的页面了,404还是django的错误页面吧。。。

    自己定义时则需进行全局定义

    即不能包含在上述urlpatterns中

    #urls.py
    handler404 = 'app.views.page_not_found'
  • 相关阅读:
    再次尝试windows下msys+MinGW编译ffmpeg
    iOS设备的硬件适配 (关于armv6, armv7, armv7s ) <转>
    vmware虚拟机下ubuntu 13.04使用zeranoe脚本交叉编译ffmpeg
    vmware 8下ubuntu 13.04安装vmware tools
    ubuntu下使用脚本交叉编译windows下使用的ffmpeg + X264
    网上看来的
    ffmpeg关于aac解码
    iOS阶段学习第15天笔记(NSDate操作)
    iOS阶段学习第15天笔记(NSDictionary与NSMutableDictionary 字典)
    iOS阶段学习第15天笔记(NSArray与NSMutableArray 数组)
  • 原文地址:https://www.cnblogs.com/nelsen-chen/p/9488089.html
Copyright © 2011-2022 走看看