2Python全棧之路系列之Django路由與視圖
阿新 • • 發佈:2017-05-12
request 配置文件 hello 文章
Python全棧之路系列之Django路由與視圖
路由說白了就是與視圖(函數)的對應關系,怎麽說呢,一個路由對應一個視圖,比如上面文章中所提到的那樣,當打開/users/
路徑的時候會讓users
這個函數來進行邏輯處理,把處理的結果再返回到前端。
那麽django是怎麽知道從哪裏找路由的配置文件入口呢?其實這在settings.py
文件中已經被定義了:
ROOT_URLCONF = ‘ansheng.urls‘
路由的配置
絕對地址訪問
# 訪問地址必須是http://127.0.0.1:8000/hello/ url(r‘^hello/$‘, views.hello),
使用正則與分組
在函數內需要接受year,month,day參數
url(r‘^(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$‘, views.deta),
deta
視圖必須接收以下參數:
def deta(request, year, month, day):
訪問地址為:http://127.0.0.1:8000/2016/11/19/
傳值
url(r‘^(?P<year>[0-9]{4})/$‘, views.id, {‘foo‘: ‘bar‘}),
id
函數必須接受year與foo參數
include分發,有利於解耦
# 當訪問二級路由是cmdb的時候轉發給app01.urls處理 url(r‘^cmdb/$‘, include(‘app01.urls‘)),
別名
主要用於前端的from表單驗證,如下實例,URLs地址的時候,因為from表單提交的地址使用了別名,所以會自動替換:
# urls.py from django.conf.urls import url from app01 import views urlpatterns = [ url(r‘^index/$‘, views.index, name=‘bieming‘), ] # views.py from django.shortcuts import render,HttpResponse def index(request): if request.method==‘POST‘: username=request.POST.get(‘username‘) password=request.POST.get(‘password‘) if username==‘as‘ and password==‘123‘: return HttpResponse("登陸成功") return render(request, ‘index.html‘) # index.html <form action="{% url ‘bieming‘ %}" method="post"> 用戶名:<input type="text" name="username"> 密碼:<input type="password" name="password"> <input type="submit" value="submit"> </form>
路由分解
可以使用incloud
把很多個路由進行拆封,然後把不同的業務放到不同的urls中,首先我們創建項目及應用
# 創建DjangoProjects項目 E:\>django-admin.py startproject DjangoProjects E:\>cd DjangoProjects # 在項目內創建app1和app12應用 E:\DjangoProjects>python manage.py startapp app1 E:\DjangoProjects>python manage.py startapp app2
項目的urls.py文件內容
# E:\DjangoProjects\DjangoProjects\urls.py from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ # 當路由匹配到一級路徑為app1時,就把這個URL交給app1.urls再次進行匹配 url(r‘^app1/‘, include(‘app1.urls‘)), url(r‘^app2/‘, include(‘app2.urls‘)), ]
應用的urls.py和views.py文件內容
# E:\DjangoProjects\app1\urls.py from django.conf.urls import url,include from django.contrib import admin from app1 import views urlpatterns = [ url(r‘^hello/$‘, views.hello), ] # E:\DjangoProjects\app1\views.py from django.shortcuts import render,HttpResponse def hello(request): return HttpResponse("Hello App1") # E:\DjangoProjects\app2\urls.py from django.conf.urls import url from django.contrib import admin from app2 import views urlpatterns = [ url(r‘^hello/$‘, views.hello), ] # E:\DjangoProjects\app2\views.py from django.shortcuts import render,HttpResponse def hello(request): return HttpResponse("Hello App2")
當訪問http://127.0.0.1:8000/app1/hello/時返回內容
Hello App1
當訪問http://127.0.0.1:8000/app2/hello/時返回內容
Hello App2
視圖
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’) | 頁面跳轉 |
HttpResponse(‘https://blog.ansheng.me‘) | 給頁面返回一個字符串 |
#Python全棧之路 #Django
2Python全棧之路系列之Django路由與視圖