Django urls 配置 ,模版url調用

urls.py 配置方法

一、先配置全局工程下的 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

注意: 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/

name 擴展

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調用

# 當前的URL 
request.path_info 

url 默認值

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 和 CBV

FBV:  function base views 函數對應視圖 ,上述博客內容 說明的都是函數對應視圖

CBV: class vase views    類對應視圖

CBV (類對應視圖)使用方法:

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() 
]
相關文章
相關標籤/搜索