Django框架详解之url
Django基本命令
下载Django
pip3 install django
创建一个django project
django-admin.py startproject cms
当前目录下会生成cms的工程,目录结构如下:

setting.py --- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量
urls.py --- 负责把url模式映射到应用程序
wsgi.py --- 用于开发服务器和生产WSGI部署
manage.py --- Django项目里面的工具,通过它可以调用django shell和数据库等
创建应用
在cms目录下创建应用
python manage.py startapp app01

启动django项目
python manage.py runserver 8000

同步更改数据库表或字段
python manage.py makemigrations
python manage.py migrate
这种方法可以创建表,当你在modles.py中新增了类时,运行它就可以自动在数据库中创建表了
查看所有的命令
查看所有命令,忘记子名称的时候有用
python manage.py
静态文件配置
STATIC_URL = '/static/'
STATICFILRS_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
MTV模型之url路由配置系统
正则字符串参数
简单配置
from django.conf.urls import url
from django.contrib import admin
from app01.views import * urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^my_day/([0-9]{4})/$', my_day),
url(r'^my_day/([0-9]{4})/([0-9]{2})/$', my_day2),
url(r'^my_day/([0-9]{4})/([0-9]{2})/([0-9]{2})/$', my_day3),
] # 一旦匹配成功则不再继续
# 若要从url中捕获一个值,只需要在它周围放置一对圆括号
# 不需要添加一个前导的反斜杠,因为每个url都有(^my_time 而不是^/my_time)
# 每个正则表达式前面的r是可选的但是建议加上
def my_day(request,year):
return HttpResponse(year) def my_day2(request,year,month):
return HttpResponse('%s-%s'%(year,month)) def my_day3(request,year,month,day):
return HttpResponse('%s-%s-%s'%(year,month,day))
code
#设置项是否开启URL访问地址后面不为/跳转至带有/的路径
APPEND_SLASH=True
有名分组(named group)
上面的示例使用的是没有命名的正则表达式组,在更高级的用法中可以使用命名的正则表达式组,在python正则表达式中,命名正则表达式组的语法是(?P<name>pattern)
from django.conf.urls import url
from app01.views import * urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^my_day/(?P<year>[0-9]{4})/$', my_day),
url(r'^my_day/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', my_day2),
url(r'^my_day/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', my_day3),
]
#捕获的值作为关键字参数而不是位置参数传递给视图函数
urlconf查找
urlconf在请求的url上查找,将它当作一个普通的python字符串,不包括GET和POST参数以及域名
http://www.example.com/myapp/ 请求中,URLconf 将查找myapp/。 http://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找myapp/。
example
urlconf捕获的参数永远是字符串
每个捕获的参数都作为一个普通的python字符串传递给视图
指定视图参数的默认值
from django.conf.urls import url
from app01.views import * urlpatterns = [
url(r'^my_day/(?P<year>[0-9]{4})/$', my_day2),
url(r'^my_day/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', my_day2),
]
urlconf
def my_day2(request,year,month=''):
return HttpResponse('%s-%s'%(year,month))
view
两个url都指向同一个视图,如果第一个模式匹配,视图函数将使用参数的默认值;如果第二个模式匹配,视图函数将使用正则表达式捕获的值
Including other URLconfs
from django.conf.urls import url
from django.contrib import admin
from django.conf.urls import include urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app01', include('app01.urls')) ]
传递额外的选项给视图函数
urlconfs具有一个钩子,让你传递一个python字典作为额外的参数传递给视图函数
from django.conf.urls import url
from django.contrib import admin
from app01.views import * urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^my_day/(?P<year>[0-9]{4})/$', my_day2, {'foo':'bar'}),
] #django.conf.urls.url()函数可以接收一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数
url反向解析
在模板中,Django使用url模板标签用于反向解析url
from django.conf.urls import url
from app01.views import * urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^hello', my_hello, name='little_hello'),
]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>my_day</title> </head>
<body>
<a href="{%url 'little_hello'%}">点我跳转</a>
</body>
</html>
#示例二
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a> <ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>
在python代码中,可以这样使用
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect def redirect_to_year(request):
# ...
year = 2006
# ...
return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))
名称空间
Namespace是表示标识符的可见范围。一个标识符可在多个名称空间中定义,它在不同名称空间中的含义是互不相干的。这样,在一个新的名称空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他名称空间中
由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回。当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种错误,引入了名称空间
Project.urls
from django.conf.urls import url,include
from django.contrib import admin urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app01/',include("app01.urls",namespace='app01')),
url(r'^app02/',include("app02.urls",namespace='app02')),
]
app01.urls
from django.conf.urls import url urlpatterns = [
url(r'^index/', index,name="index"),
]
app02.urls
from django.conf.urls import url urlpatterns = [
url(r'^index/', index,name="index"),
]
app01.views
from django.core.urlresolvers import reverse
def index(request):
return HttpResponse(reverse("app01:index"))
app02.views
from django.core.urlresolvers import reverse
def index(request):
return HttpResponse(reverse("app02:index"))
Django框架详解之url的更多相关文章
- Django框架详解
一.WSGI接口 WSGI服务网关接口:Web Server Gateway Interface缩写. WSGI是python定义的Web服务器和Web应用程序之间或框架之间的通用接口标准. WSGI ...
- Django框架详解之views
一个简单的视图 一个视图函数,是一个简单的python函数,它接受web请求并且返回web响应.无论视图本身包含什么逻辑,都要返回响应.为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为 ...
- Django框架详解之template
模板简介 将页面的设计和python的代码分离开会更干净简洁更容易维护.我们可以使用Django的模板系统来实现这种模式 python的模板:HTML代码+模板语法 模板包括在使用时会被值替换掉的变量 ...
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
- jQuery Validate验证框架详解
转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...
- [Cocoa]深入浅出 Cocoa 之 Core Data(1)- 框架详解
Core data 是 Cocoa 中处理数据,绑定数据的关键特性,其重要性不言而喻,但也比较复杂.Core Data 相关的类比较多,初学者往往不太容易弄懂.计划用三个教程来讲解这一部分: 框架详解 ...
- 【转】jQuery Validate验证框架详解
jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一.导入js库 <script type=& ...
- Spark2.1.0——内置Web框架详解
Spark2.1.0——内置Web框架详解 任何系统都需要提供监控功能,否则在运行期间发生一些异常时,我们将会束手无策.也许有人说,可以增加日志来解决这个问题.日志只能解决你的程序逻辑在运行期的监控, ...
- Django -- settings 详解
Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运 ...
随机推荐
- siblings() next() nextAll() nextUntil() prev() prevAll() prevUntil() 在 DOM 树中水平遍历
$(document).ready(function(){ $("h2").siblings(); });拿到h2标签的所有的同级元素什么标签都可以 $(document).rea ...
- Arguments Optional FreeCodeCamp
function add() { if(typeof arguments[0] !== "number" || (arguments.length > 1 && ...
- [置顶]
HTTP 幂等性概念和应用
转自:http://coolshell.cn/articles/4787.html HTTP 幂等性概念和应用 [ 感谢 Todd 同学 投递本文 ] 基于 HTTP 协议的 Web API 是时下最 ...
- GROUP BY GROUPING SETS 示例
--建表 create table TEst1 ( ID ), co_CODE ), T_NAME ), Money INTEGER, P_code ) ); --插入基础数据 insert into ...
- 通过js 实现 向页面插入js代码并生效,和页面postMessage通讯
此文章针对已经搭建好jenkins和会使用iconfont图标库而写. 主要目标就是在不通过更改html文件,完成页面交互图标信息,因为美工最多可以上传代码并且自动发布,并不会在Html中加入我 ...
- ACM成长之路
前几天在网上看到,转过来时刻督促一下自己. ACM队不是为了一场比赛而存在的,为的是队员的整体提高. 大学期间,ACM队队员必须要学好的课程有: l C/C++两种语言 l 高等数学 l 线性代数 l ...
- Python hangman小游戏
hangman # words.py 使用pickle永久性存储数据 import pickle filename = 'words.pk' data = ['cat', 'dog', 'perro' ...
- Python面向对象之静态方法、静态方法与类方法
静态属性: 类调用函数属性时,需要先将类实例化,再将实例作为函数属性传入:类的实例调用函数属性时需要在后面加括号. class Building: def __init__(self, name, o ...
- poj 2955 区间dp入门题
第一道自己做出来的区间dp题,兴奋ing,虽然说这题并不难. 从后向前考虑: 状态转移方程:dp[i][j]=dp[i+1][j](i<=j<len); dp[i][j]=Max(dp[i ...
- Vijos—— T 1359 Superprime
https://vijos.org/p/1359 描述 农民约翰的母牛总是生产出最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因 ...