1. 程式人生 > >2Python全棧之路系列之Django路由與視圖

2Python全棧之路系列之Django路由與視圖

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函數必須接受yearfoo參數

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.pyviews.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")
  1. 當訪問http://127.0.0.1:8000/app1/hello/時返回內容Hello App1

  2. 當訪問http://127.0.0.1:8000/app2/hello/時返回內容Hello App2

視圖

http請求:HttpRequest對象
http響應:HttpResponse對象

HttpRequest對象屬性

屬性描述
request.path請求頁面的路徑,不包括域名
request.get_full_path()獲取帶參數的路徑
request.method頁面的請求方式
request.GETGET請求方式的數據
request.POSTPOST請求方式的數據

HttpResponse對象屬性

屬性描述
render(request, ‘index.html’)返回一個模板頁面
render_to_response(‘index.html’)返回一個模板頁面
redirect(‘/login’)頁面跳轉
HttpResponseRedirect(‘/login’)頁面跳轉
HttpResponse(‘https://blog.ansheng.me‘)給頁面返回一個字符串

#Python全棧之路 #Django


2Python全棧之路系列之Django路由與視圖