• 在应用中创建视图定义路由
  • 配置文件说明
  • 静态文件使用
  • Django解析路由的流程
  • 路由顺序
  • 路由命名与reverse反推

在应用中创建视图定义路由

前面我们已经创建了子应用users,但是这个users我们还使用不了,要想使用它,我们必须把它注册到框架应用中。注册子应用非常简单,只需要在配置文件settings.py中的INSTALL_APPS列表中添加该子应用即可,如下:

  1. INSTALLED_APPS = [
  2. ...
  3. 'users.apps.UsersConfig', #在django老版本(如1.8)可以直接写users,新版本不建议直接写
  4. ]

settings.py

注册完成之后,就可以对整个子路由进行开发视图和路由了。

user.views.py用来写视图,如下

  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3.  
  4. def index(request):
  5. """
  6. 视图
  7. request: 用于接受请求request对象
  8. return: 响应对象
  9. """
  10. return HttpResponse('hello world')

users.views.py

视图写好了,接下来可以写路由了,可以在users子应用下创建该子应用用于配置路由的文件urls.py

  1. from django.conf.urls import url
  2. from . import views
  3.  
  4. urlpatterns = [
  5. # url(路径,视图)
  6. url(r'^index/$', views.index),
  7. ]

users.urls.py

虽然我们子应用配置好了路由,但是我们访问页面路由是去总的路由页面去搜索的,urls.py,因此我们需要在总的路由文件urls.py把子应用路由users.urls包含进来

  1. from django.conf.urls import url, include
  2. from django.contrib import admin
  3.  
  4. urlpatterns = [
  5. url(r'^admin/', admin.site.urls),
  6. url(r'^users/', include('users.urls')), #包含users子路由
  7. ]

demo.urls.py

然后我们就可以访问http://127.0.0.1:8000/users/index

配置文件说明

在项目的settings.py配置文件中,进行项目相关配置的解释修改

BASE_DIR

  1. BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  2.  
  3. #当前项目的根目录,Django会以此来定位工程内的相关文件,我们也可以使用参数来构建文件路径

DEBUG

  1. DEBUG = True
  2. #是否为开发模式,默认为True

当DEBUG为True时,如果Django程序运行出现异常时,会在浏览器显示详细的出错调试信息,在非开发模式下,不会显示出错调试信息

注意:项目上线应该设置为False关闭开发模式,并且要同时设置ALLOWED_HOSTS参数

  1. # 关闭开发模式
  2. DEBUG = False
  3. #设置允许哪些主机访问,*表示匹配所有(ip)
  4. ALLOWED_HOSTS = ['*']

App应用配置

在每个应用的目录中都包含了apps.py,用于保存该应用的相关信息,在创建应用时,Django会向apps.py文件中写入一个该应用的配置类,如下:

  1. from django.apps import AppConfig
  2.  
  3. class UsersConfig(AppConfig):
  4. # 表示这个配置类是加载到哪个应用
  5. # 每个配置类必须包含次属性,默认自动生成
  6. name = 'users'

users.apps.py

应用配置:需要在配置文件settings.py中的INSTALLED_APPS列表中,注册创建出来的应用

  1. INSTALLED_APPS = [
  2. ...
  3. 'users.apps.UsersConfig',
  4. ]

本地语言与时区

Django支持本地化处理,即显示语言与时区,新创建的Django项目,默认使用的语言为英语,时区为UTC标准时区,我们可以将语言和时区修改为中国大陆信息

  1. LANGUAGE_CODE = 'zh-hans' #语言设置为 中文
  2. TIME_ZONE = 'Asia/Shanghai' #时区设置为 亚洲/上海

静态文件使用

在项目中css、js、img都是静态文件,静态文件可以放在一个单独的目录中,以方便管理。我们配置静态文件相关配置需要确定一下两点:

  • STATICFILES_DIRS  静态文件保存在哪个目录下(此参数默认django没有配置,需要开发者自己配置)
  • STATIC_URL 访问静态文件的URL前缀,通常采用默认自/static/

在项目根目录下创建static_files目录,并添加子目录和文件 imgs/heboan.jpg

在项目settings.py文件中进行配置

  1. # 访问静态文件用到的url前缀
  2. STATIC_URL = '/static/'
  3. #告知Django静态文件保存在哪个目录下
  4. STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static_files')]

浏览器访问http://127.0.0.1:8000/static/imgs/heboan.jpg

因此,我们可以在index.html模板中应用

  1. <img src="/static/imgs/heboan.jpg" />

Django仅在开发模式下能对外提供静态文件
当DEBUG=False工作在生产模式时,Django不再对外提供静态文件,需要用collectstaic命令来收集静态文件并交由其他静态文件服务器来提供

Django解析路由的流程

路由顺序

Django在接收到一个请求时,从主路由文件中的urlpatterns列表中以由上至下的顺序查找对应的路由规则,如果发现规则为include包含,则再进入urls中的urlpassterns列表由上至下进行查询。

值得关注的由上至下的顺序,有可能会使上面的路由屏蔽掉下面的路由,带来非预期的结果,如下,

路由users.urls.py

  1. from django.conf.urls import url
  2. from . import views
  3.  
  4. urlpatterns = [
  5. # url(路径,视图)
  6. url(r'^index/$', views.index),
  7. url(r'^say', views.say),
  8. url(r'^sayhello', views.sayhello)
  9. ]

users.urls.py

视图users.views.py

  1. ...
  2. def say(request):
  3. return HttpResponse('say')
  4.  
  5. def sayhello(request):
  6. return HttpResponse('sayhello')

users.views.py

即使访问sayhello路径,预期应该进入sayhello视图执行,但实际悠闲查找到say路由规则也与sayhello/路径匹配,实际进入了say视图执行。

路由命名与reverse反推

路由命名

在定义路由的时候,可以为路由命名,方便查找特定视图的具体路径信息

1)在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,如demo.urls.py(总路由文件)

  1. urlpatterns = [
  2. ...
  3. url(r'^users/', include('users.urls', namespace='users')),
  4. ]

2)在定义普通路由时,可以使用name参数指名路由的名字,如users.urls.py

  1. urlpatterns = [
  2. # url(路径,视图)
  3. url(r'^index/$', views.index, name='index'),
  4. url(r'^say', views.say, name='say'),
  5. ]

reverse反解析

使用reverse函数,可以根据路由名称,返回具体的路径,如下

  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. from django.core.urlresolvers import reverse
  4.  
  5. ...
  6.  
  7. def say(request):
  8. url = reverse('users:index')
  9. print(url)
  10. return HttpResponse('say')

users.views.py

  • 对于未指明namespace的,reverse(路由name)
  • 对于指明namespace的,reverse(命名空间namespace:路由name)
  1.  

第2天:Django路由与视图的更多相关文章

  1. Django路由与视图

    路由层 一.路由匹配规则: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个之后立即匹配,直接执行对应的视图函数 url(r'login', views.login), 如果按上面的形 ...

  2. FROM DELETE LIBRARY TO RUN の Django路由和视图

    一.requests安装 · requests是什么? request是python实现的简单易使用的http库 · 如何安装? pip install requests ·检测是否成功 import ...

  3. Django基础(路由、视图、模板)

    目录导航 Django 路由控制 Django 视图层 Django 模版层 Django 路由控制 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用 ...

  4. Django的View(视图)和路由系统

    一.Django的View(视图) 1.介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一 ...

  5. Django Rest Framework 视图和路由

    Django Rest Framework 视图和路由   DRF的视图 APIView 我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们 ...

  6. 【python】-- Django路由系统(网址关系映射)、视图、模板

    Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...

  7. day53_9_17 django数据库表关联,路由和视图

    一.数据库的关系建立. 在原生的数据库语句中,建立表与表之间的联系,就是添加一个字段,将联系的表的id值添加到该字段中. django所作的也就是这些. 以图书管理系统为例,图书管理系统有四张表:书籍 ...

  8. Django drf:视图层封装、ViewSetMixin、路由配置、解析器、响应器

    一.视图层封装 二.ViewSetMixin 三.路由配置 四.解析器 五.响应器 一.视图层封装 1.基本视图 写一个出版社的增删改查resfull接口 路由: url(r'^publish/$', ...

  9. Django基础三之路由、视图、模板

    Django基础三之路由.视图.模板 目录 Django基础三之路由.视图.模板 1. Django 请求和返回周期 1.1 路由层之路由匹配 1.2 有名分组 1.3 无名分组 2. 反射解析 3. ...

随机推荐

  1. [php]mysql操作流程

    这种是比较老的一种mysql连接方法 1.连接数据库 $this->con = mysql_connect($this->host, $this->user, $this->p ...

  2. codeforces997C Sky full of stars

    传送门:http://codeforces.com/problemset/problem/997/C [题解] 注意在把$i=0$或$j=0$分开考虑的时候,3上面的指数应该是$n(n-j)+j$ 至 ...

  3. 微信小程序开发(五)开发框架MINA

    微信团队为小程序提供的框架命名为MINA应用框架.MINA框架通过封装微信客户端提供的文件系统.网络通信.任务管理.数据安全等基础功能,对上层提供一整套JavaScript API,让开发者能够非常方 ...

  4. [NOI导刊2010提高&洛谷P1774]最接近神的人 题解(树状数组求逆序对)

    [NOI导刊2010提高&洛谷P1774]最接近神的人 Description 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某 ...

  5. 天梯赛 L2-007. (并查集) 家庭房产

    题目链接 题目描述 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式 ...

  6. aarch64_g1

    GAPDoc-1.5.1-12.fc26.noarch.rpm 2017-02-14 07:37 1.0M fedora Mirroring Project GAPDoc-latex-1.5.1-12 ...

  7. MySQL修改datadir目录

    更改MySQL的数据目录由/usr/local/mysql/data/更换至/data/mysql/ 第一种方法修改my.cnf 1)关闭MySQL [root@test2 ~]# service m ...

  8. ArcGIS RunTime Sdk +WPF 基础地图显示

    1 简单的地图展示 ArcGISRunTime 的平面地图展示主要依赖MapView这个控件,MapView是地图的容器,Map主要是图层的集合 (注:三维场景的显示主要依赖SceneView这个控件 ...

  9. npm 下载node-zookeeper包

    环境:centos7(lunix) 1.安装nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install. ...

  10. IIS 启用https

    参考:http://www.cnblogs.com/dudu/p/iis_https_ca.html