python--django之url控制器
Posted 嘟囔囔小孩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python--django之url控制器相关的知识,希望对你有一定的参考价值。
1.视图层之路由配置系统(views)
URL配置(URLconf)就像Django所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
‘‘‘
urlpatterns = [
url(正则表达式, views视图函数,参数,别名),
]
参数说明:
一个正则表达式字符串
一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
可选的要传递给视图函数的默认参数(字典形式)
一个可选的name参数
‘‘‘
2.URLconf的正则字符串参数
2.1.简单配置
from django.conf.urls import url
##from blog import views as blog_views #可以定义别名
from . import views urlpatterns = [ url(r‘^articles/2003/$‘, views.special_case_2003), url(r‘^articles/([0-9]{4})/$‘, views.year_archive), url(r‘^articles/([0-9]{4})/([0-9]{2})/$‘, views.month_archive), url(r‘^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$‘, views.article_detail), ]
2.2.url匹配的特点
1 一旦匹配成功则不再继续
2 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
3 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
4 每个正则表达式前面的‘r‘ 是可选的但是建议加上。
2.3.无名分组
url(r‘article/(\d+)/(\d+)$‘,blog_views.article_yearMonth ), # article_yearMonth(request,2009,12)
分组会将括号中的内容当成实参传入到request的后边。传参数方式等于位置传参。
2.4.有名分组(named group) 传参方式等同于关键字传参,不受位置影响。
例子:
url(r‘^blog/article/(?P<year_id>\d+)/(?P<month_id>\d+)$‘,blog_views.article_yearMonth ) # article_yearMonth(request,year_id=2009,month_id=12)
2.5.url 分发
所有应用的url匹配规则只写到一个urls中,需要写好多条记录,这样不方便调试,看起来也很混乱。所有就需要用到路由分发,即将每个应用的url匹配规则分发定义到各自的应用中去,项目中的url值定义到应用的分发规则即可。
例子:
# 路由分发
url(r‘^blog/‘, include(‘blog.urls‘)), #将所有跟blog相关的url解析规则放到 blog应用中去。
url(r‘^login.htmls/‘, app01_views.login,name="LOGIN")
2.6. URL方向解析(url中的别名参数)
在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。
人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。
换句话讲,需要的是一个DRY 机制。除了其它有点,它还允许设计的URL 可以自动更新而不用遍历项目的源代码来搜索并替换过期的URL。
获取一个URL 最开始想到的信息是处理它视图的标识(例如名字),查找正确的URL 的其它必要的信息有视图参数的类型(位置参数、关键字参数)和值。
Django 提供一个办法是让URL 映射是URL 设计唯一的地方。你填充你的URLconf,然后可以双向使用它:
- 根据用户/浏览器发起的URL 请求,它调用正确的Django 视图,并从URL 中提取它的参数需要的值。
- 根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。
第一种方式是我们在前面的章节中一直讨论的用法。第二种方式叫做反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查。
在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:
- 在模板中:使用url 模板标签。
- 在Python 代码中:使用
django.core.urlresolvers.reverse()
函数。 - 在更高层的与处理Django 模型实例相关的代码中:使用
get_absolute_url()
方法。
例子:
项目中的url这么写
url(r‘^login.htmls/‘, app01_views.login,name="LOGIN")
通过app01应用中的views找到 login方法
from django.shortcuts import render,HttpResponse
# Create your views here.
def login(request):
if request.method=="POST":
user=request.POST.get("user")
pwd=request.POST.get("pwd")
return HttpResponse("登录成功!")
return render(request,"login.html")
通过login函数找到需要请求 login.html这个页面
login页面内容如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="{% url ‘LOGIN‘ %}" method="post"> <p>姓名 <input type="text" name="user"></p> <p>密码 <input type="password" name="pwd"></p> <input type="submit"> </form> </body> </html>
以上是关于python--django之url控制器的主要内容,如果未能解决你的问题,请参考以下文章