一、先配置全局工程下的 url 分發,經過不一樣的url 匹配規則,分發到不一樣的app (app可理解爲不一樣的站點)html
通常設置全局工程的 url.py 分發到 ----------->不一樣站點(app)下的 urls.pypython
from django.conf.urls import url,include #include 要新增 from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), #系統默認 url(r'^android/',include('android.urls')), #新增分發到APP下的ulrs ]
二、配置APP下的 urls.py 映射 ,經過正則表達式,來分發對應的view.py下的函數android
from django.conf.urls import url from android.views import index,login,list,logout urlpatterns = [ url(r'^index/',index), url(r'^login/',login), url(r'^list/(?P<name>\d*)/',list), #推薦?P<name>版型正則表達式規則,方便理解 url(r'^list/(?P<name>\w*)/',list) \d* 0到多個數字,\w* 0到多個字母 url(r'^logout/',logout,name='logout'), #經過name 命名後,模版調用更加方便 ]
三、在站點(app)下的 views.py 下,寫出對應的解析函數,配置成功正則表達式
from django.shortcuts import render from django.http import HttpResponse # Create your views here. def index(request): return HttpResponse('index') def login(request): return HttpResponse('index') def list(request,name): return HttpResponse('list')
4. 在CMD 下,進入mange.py目錄,並運行 manage.py (內置服務器), 便可開啓瀏覽器測試django
python manage.py runserver
特別說明:瀏覽器
在django 中,瀏覽器的 網址 尾部 會默認加上 '/' 如:http:// www.baidu.com/
這是受配置文件 setting.py中 APPEND_SLASH 項控制的 ,默認爲 True 服務器
若是不須要網址末尾加斜槓 '/' ,在 setting.py 中新增 APPEND_SLASH=Flase 便可 session
導入多個app 的視圖函數:
若是導入多個app 的 視圖函數,若遇到重名,則須要 as 轉換
app
from django.conf.urls import url from django.contrib import admin from app01 import views from session import views as session_views #用as 轉換 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/(\w*)', views.index), url(r'^login/$', session_views.login), #使用轉換後的視圖函數 url(r'^main/$', session_views.main), url(r'^logout/$', session_views.logout), ]
注意: url 配置 成 name ='xxx' ,可對 url 關係進行命名,之後根據此名稱生成想要的url函數
若是url 太長,能夠用此種方法
如 :urls.py -- url(r'^asdasdasdadasdasdasdasd/',logout,name='logout')
html模版 : <form action ={% url 'logout' nid=row.id%}> </form>
<form action ={% url 'logout' %}> </form>
<form action ={% url 'logout' 3%}> </form>
對應瀏覽器上的url 爲: /asdasdasdadasdasdasdasd/3/
from django.urls import reverse #可幫咱們生成想要的url
urls.py
url(r'^asdfasdfasdf/', views.index, name='i1'), #規則1 url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'), url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
views.py
from django.urls import reverse def func(request, *args, **kwargs): url1 = reverse('i1') # asdfasdfasdf/ 生成的url,根據規則1 url2 = reverse('i2', args=(1,2,)) # yug/1/2/ url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
html 模版
# xxx.html {% url "i1" %} # asdfasdfasdf/ {% url "i2" 1 2 %} # yug/1/2/ {% url "i3" pid=1 nid=9 %} # buy/1/9/
# 當前的URL
request.path_info
urls.py
url(r'^index/$', views.index {'name':root},
views.py
def index(request,name): pass
urls命名空間
urls include分發 ,加name 加 namespace ,案例
一、主urls.py
from django.conf.urls import url,include #include 要新增 urlpatterns = [ url(r'^a/',include('app01.urls' ,namespace='author')), # namespace 命令空間 ]
二、app01.urls
app_name = 'app01' #添加app_name = 'app01' urlpatterns = [ url(r'^index/',views.index name='lee'), ]
三、view.py
from django.urls import reverse def index(request): v = reverse('author:lee') print(v) #生成 的ulr 爲 /a/index/
四、html 調用url
{% url 'author:lee'%}
FBV: function base views 函數對應視圖 ,上述博客內容 說明的都是函數對應視圖
CBV: class vase views 類對應視圖
views.py
from django.views import View #必須導入 View class Home(View) #該類必須繼承 View 類 def post(self,request): #post 請求放post 函數裏面 ,self,request 必填 pass def get(self,request): #get 請求放get 函數裏面 pass
不一樣的請求能夠放在不一樣的函數裏面(get,post,put),是由於,定義的類繼承了 View 類的 dispath() 方法
默認定義如下方法後,能夠自動識別
['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
urls.py
from xxxapp import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^home/', views.Home.as_view()), #必須爲 vews.xx類.as_view() ]