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(与项目进行交互的命令行工具集入口(项目管理器))

  • 相关阅读:
    jQuery插件开发入门
    [转]JS学习总结-技巧、方法、细节
    JS无法获取display为none的隐藏元素的宽度和高度的解决方案
    vuejs2.0运用原生js实现简单的拖拽元素功能
    HTML5效果:Canvas 实现圆形进度条并显示数字百分比
    git常用命令总结以及用github来展示你的前端页面
    jQuery 对AMD的支持(Require.js中如何使用jQuery)
    vue+springboot上传和下载附件功能
    springboot+vue实现文件上传
    Spring boot+Vue全栈开发---Spring Boot文件上传
  • 原文地址:https://www.cnblogs.com/wanghao123/p/7987083.html
Copyright © 2011-2022 走看看