码迷,mamicode.com
首页 > 编程语言 > 详细

python--django之url控制器

时间:2017-11-10 01:46:41      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:自动更新   传递   表达   设计   标识   att   django   nbsp   控制器   

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控制器

标签:自动更新   传递   表达   设计   标识   att   django   nbsp   控制器   

原文地址:http://www.cnblogs.com/yxwang/p/7812056.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!