zoukankan      html  css  js  c++  java
  • Django之路第二篇:路由配置

    路由配置

    1.路由

      在Django中,路由文件的名称一般都是urls.py,顶级路由处于最开始建立的项目目录下。路由的主要作用就是使各个应用中views里面处理数据的函数与请求的url建立映射关系,以urls.py文件里面的路由为寻找路径,去寻找与请求对应的处理方法,从而返回给客户端http页面数据。

    path()函数传递四个参数,需要两个:route和view,和两个可选kwargs和name。

    (1)path()参数之route

      route是一个包含URL模式的字符串。在处理请求时,Django从第一个模式开始,urlpatterns并在列表中向下,比较所请求的URL和每个模式,直到找到匹配的模式。

    (2)path()参数之view

      当Django找到一个匹配的模式时,它会以一个HttpRequest对象作为第一个参数和路由中的任何“捕获”值作为关键字参数来调用指定的视图函数

    (3)path()参数之kwargs

      任意的关键字参数可以在字典中传递给目标视图。

    (4)path()参数之name

      命名您的URL可以让您从Django的其他地方明确地引用它,特别是在模板中。这个强大的功能使您可以对项目的URL模式进行全局更改,而只触摸单个文件。

    2.路由规则

    (1)静态路由

      匹配规则:http://127.0.0.1:8000/index/

      url(r'^index',views.index)

    对应views.py文件:

    1 from django.shortcuts import render
    2 
    3 def index(request):
    4     return render(request, "index.html")

    (2)动态路由

      ① 匹配规则 http://127.0.0.1:8000/detail/432432 将最后面的数字当做参数传递给views.detail函数的nid参数

      url(r'^detail/(d+)', views.detail)

      ②匹配规则 http://127.0.0.1:8000/detail2/432432/2 将最后面的两个数字当做参数分别传递给views.detail函数的nid和nnid参数

      url(r'^detail2/(d+)/(d+)', views.detail2)

      ③匹配规则 http://127.0.0.1:8000/detail3/432432/2 将最后面的两个数字根据自定义的名字当做参数分别传递给views.detail函数的p1和p2参数

      url(r'^detail3/(?P<p1>d+)/(?P<p2>d+)', views.detail3)

    对应的views.py文件:

     1 from django.shortcuts import HttpResponse
     2 
     3 def detail(request, nid):
     4     print(nid)
     5     return HttpResponse("OK")
     6 
     7 def detail2(request, nid, nnid):
     8     print(nid, nnid)
     9     return HttpResponse("OK")
    10 
    11 def detail3(request, p1, p2):
    12     print(p1, p2)
    13     return HttpResponse("OK")

    编辑第一个页面响应

    1.编辑blog.views

    • 首先引入HttpResponse类
    • 定义一个index函数,函数传入参数为request,函数返回HttpResponse
    1 # myblog/blog/views.py
    2 
    3 from django.http import HttpResponse
    4 
    5 def index(request):
    6      return HttpResponse("Hello,world!")

    2.设置路由

      找到myblog文件下面有一个urls.py文件,里面有一个urlpatterns数组,目前urlpatterns数组中已经配置好了admin的路由。由于目前还不知道怎么配置路由,我们可以先仿照着admin配置blog的路由。

    • 首先引入blog
    • 然后在urlpatterns里面添加blog路由函数
     1 # myblog/myblog/urls.py
     2 
     3 from django.contrib import admin
     4 from django.urls import path
     5 from blog import views
     6 
     7 urlpatterns = [
     8     path('admin/', admin.site.urls),
     9     path('index/', views.index),
    10 ]

    3.启动服务

    • 打开命令行,进入项目中manage.py同级目录

    • 命令行输入:python manage.py runserver 启动服务

    • 打开浏览器输入网址:http://127.0.0.1:8000/index/

    经过以上步骤,就可以在浏览器上看见“Hello,world!”字样。

    改写第一个页面响应路由

      我在创建第一个第一个页面响应的时候,将URL配置在了myblog/urls.py中。但是现在只建立一个同级的应用,如果以后增加到十个,甚至几十个同级或者嵌套的应用时呢,也都写在这里面,那看上去不是很臃肿吗。所以为了避免这种情况,就得优化它。

      基于这些问题,采用的方法是:上一级urls.py只设置下一级的应用,而不能跳跃式设置嵌套应用url。

    具体的步骤是:

    • 在myblog/urls.py文件中引入include

    • 在urlpatterns数组中的blog应用的url函数使用include

    • 在blog文件夹下添加urls.py文件

    • 在blog/urls.py文件中,按照正常的url添加路由

    • 打开浏览器输入:http://127.0.0.1:8000/blog/,既可以正常访问

    修改后的myblog/urls.py:

    1 # myblog/urls.py
    2 
    3 from django.contrib import admin
    4 from django.urls import path,include
    5 
    6 urlpatterns = [
    7     path('admin/', admin.site.urls),
    8     path('blog/', include('blog.urls')),
    9 ]

    修改后的blog/urls.py:

    1 # blog/urls.py
    2 
    3 from django.conf.urls import url
    4 from . import views
    5 
    6 urlpatterns = [
    7     url('^$',views.index)
    8 ]

    当前的工程目录结构

    myblog

      |-----blog(应用目录)

        |-----migrations(数据移植模块,内容自动生成)

          |------__init__.py

        |-----__init__.py

        |-----admin.py(应用的后台管理系统配置)

        |-----apps.py(应用的一些配置)

        |-----models.py(数据模块,类似于MVC结构中的Models(模型))

        |-----tests.py(自动化测试模块)

        |-----views.py(执行响应的代码所在模块)

        |-----urls.py(新增路由文件)

      |-----myblog(项目目录)

        |-----__init__.py

        |-----settings.py(项目中的总配置文件)

        |-----urls.py(URL配置文件)

        |-----wsgi.py(Python应用与Web服务器之间的接口)

      |-----db.sqlite3(数据库文件)

      |-----manage.py(与项目进行交互的命令行工具集入口(项目管理器))

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/wanghao123/p/7987083.html
Copyright © 2011-2022 走看看