路由说白了就是与视图(函数)的对应关系,怎么说呢,一个路由对应一个视图,比如上面文章中所提到的那样,当打开<code>/users/</code>路径的时候会让<code>users</code>这个函数来进行逻辑处理,把处理的结果再返回到前端。
那么django是怎么知道从哪里找路由的配置文件入口呢?其实这在<code>settings.py</code>文件中已经被定义了:
<code>ROOT_URLCONF = </code><code>'ansheng.urls'</code>
绝对地址访问
<code># 访问地址必须是http://127.0.0.1:8000/hello/</code>
<code>url(r</code><code>'^hello/$'</code><code>, views.hello),</code>
使用正则与分组
在函数内需要接受year,month,day参数
<code>url(r</code><code>'^(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$'</code><code>, views.deta),</code>
<code>deta</code>视图必须接收以下参数:
<code>def</code> <code>deta(request, year, month, day):</code>
传值
<code>url(r</code><code>'^(?P<year>[0-9]{4})/$'</code><code>, views.</code><code>id</code><code>, {</code><code>'foo'</code><code>: </code><code>'bar'</code><code>}),</code>
<code>id</code>函数必须接受year与foo参数
include分发,有利于解耦
<code># 当访问二级路由是cmdb的时候转发给app01.urls处理</code>
<code>url(r</code><code>'^cmdb/$'</code><code>, include(</code><code>'app01.urls'</code><code>)),</code>
别名
主要用于前端的from表单验证,如下实例,URLs地址的时候,因为from表单提交的地址使用了别名,所以会自动替换:
<code># urls.py</code>
<code>from</code> <code>django.conf.urls </code><code>import</code> <code>url</code>
<code>from</code> <code>app01 </code><code>import</code> <code>views</code>
<code>urlpatterns </code><code>=</code> <code>[</code>
<code> </code><code>url(r</code><code>'^index/$'</code><code>, views.index, name</code><code>=</code><code>'bieming'</code><code>),</code>
<code>]</code>
<code># views.py</code>
<code>from</code> <code>django.shortcuts </code><code>import</code> <code>render,HttpResponse</code>
<code>def</code> <code>index(request):</code>
<code> </code><code>if</code> <code>request.method</code><code>=</code><code>=</code><code>'POST'</code><code>:</code>
<code> </code><code>username</code><code>=</code><code>request.POST.get(</code><code>'username'</code><code>)</code>
<code> </code><code>password</code><code>=</code><code>request.POST.get(</code><code>'password'</code><code>)</code>
<code> </code><code>if</code> <code>username</code><code>=</code><code>=</code><code>'as'</code> <code>and</code> <code>password</code><code>=</code><code>=</code><code>'123'</code><code>:</code>
<code> </code><code>return</code> <code>HttpResponse(</code><code>"登陆成功"</code><code>)</code>
<code> </code><code>return</code> <code>render(request, </code><code>'index.html'</code><code>)</code>
<code># index.html</code>
<code><form action</code><code>=</code><code>"{% url 'bieming' %}"</code> <code>method</code><code>=</code><code>"post"</code><code>></code>
<code> </code><code>用户名:<</code><code>input</code> <code>type</code><code>=</code><code>"text"</code> <code>name</code><code>=</code><code>"username"</code><code>></code>
<code> </code><code>密码:<</code><code>input</code> <code>type</code><code>=</code><code>"password"</code> <code>name</code><code>=</code><code>"password"</code><code>></code>
<code> </code><code><</code><code>input</code> <code>type</code><code>=</code><code>"submit"</code> <code>value</code><code>=</code><code>"submit"</code><code>></code>
<code><</code><code>/</code><code>form></code>
可以使用<code>incloud</code>把很多个路由进行拆封,然后把不同的业务放到不同的urls中,首先我们创建项目及应用
<code># 创建DjangoProjects项目</code>
<code>E:\>django</code><code>-</code><code>admin.py startproject DjangoProjects</code>
<code>E:\>cd DjangoProjects</code>
<code># 在项目内创建app1和app12应用</code>
<code>E:\DjangoProjects>python manage.py startapp app1</code>
<code>E:\DjangoProjects>python manage.py startapp app2</code>
项目的urls.py文件内容
<code># E:\DjangoProjects\DjangoProjects\urls.py</code>
<code>from</code> <code>django.conf.urls </code><code>import</code> <code>url, include</code>
<code>from</code> <code>django.contrib </code><code>import</code> <code>admin</code>
<code> </code><code># 当路由匹配到一级路径为app1时,就把这个URL交给app1.urls再次进行匹配</code>
<code> </code><code>url(r</code><code>'^app1/'</code><code>, include(</code><code>'app1.urls'</code><code>)),</code>
<code> </code><code>url(r</code><code>'^app2/'</code><code>, include(</code><code>'app2.urls'</code><code>)),</code>
应用的urls.py和views.py文件内容
<code># E:\DjangoProjects\app1\urls.py</code>
<code>from</code> <code>django.conf.urls </code><code>import</code> <code>url,include</code>
<code>from</code> <code>app1 </code><code>import</code> <code>views</code>
<code> </code><code>url(r</code><code>'^hello/$'</code><code>, views.hello),</code>
<code># E:\DjangoProjects\app1\views.py</code>
<code>def</code> <code>hello(request):</code>
<code> </code><code>return</code> <code>HttpResponse(</code><code>"Hello App1"</code><code>)</code>
<code> </code>
<code># E:\DjangoProjects\app2\urls.py</code>
<code>from</code> <code>app2 </code><code>import</code> <code>views</code>
<code># E:\DjangoProjects\app2\views.py</code>
<code> </code><code>return</code> <code>HttpResponse(</code><code>"Hello App2"</code><code>)</code>
http请求:HttpRequest对象
http响应:HttpResponse对象
HttpRequest对象属性
属性
描述
request.path
请求页面的路径,不包括域名
request.get_full_path()
获取带参数的路径
request.method
页面的请求方式
request.GET
GET请求方式的数据
request.POST
POST请求方式的数据
HttpResponse对象属性
render(request, ‘index.html’)
返回一个模板页面
render_to_response(‘index.html’)
redirect(‘/login’)
页面跳转
HttpResponseRedirect(‘/login’)
给页面返回一个字符串
本文转自 Edenwy 51CTO博客,原文链接:http://blog.51cto.com/edeny/1925003,如需转载请自行联系原作者