1. 程式人生 > >Django---URL、Views

Django---URL、Views

use lena 這一 post方法 hid 常用方法 con ESS .get

1、Django URL(路由系統)

URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL模式以及要為該URL模式調用的視圖函數之間的映射表;你就是以這種方式告訴Django,對於這個URL調用這段代碼,對於那個URL調用那段代碼。

1 urlpatterns = [
2     url(正則表達式, views視圖函數,參數,別名),
3 ]

參數說明:

  • 一個正則表達式字符串
  • 一個可調用對象,通常為一個視圖函數或一個指定視圖函數路徑的字符串
  • 可選的要傳遞給視圖函數的默認參數(字典形式)
  • 一個可選的name參數

示例:

 1 from django.conf.urls import
url 2 from django.contrib import admin 3 4 from app01 import views 5 6 urlpatterns = [ 7 8 url(r^articles/2003/$, views.special_case_2003), 9 10 #url(r‘^articles/[0-9]{4}/$‘, views.year_archive), 11 12 url(r^articles/([0-9]{4})/$, views.year_archive), #no_named group 13 14 url(r
^articles/([0-9]{4})/([0-9]{2})/$, views.month_archive), 15 16 url(r^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$, views.article_detail), 17 18 ]
 1 from django.conf.urls import url
 2   
 3 from . import views
 4   
 5 urlpatterns = [
 6     url(r^articles/2003/$, views.special_case_2003),
 7     url(r^articles/(?P<year>[0-9]{4})/$
, views.year_archive), 8 url(r^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$, views.month_archive), 9 url(r^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$, views.article_detail), 10 ]

2、Django Views(視圖函數)

技術分享圖片

http請求中產生兩個核心對象:

http請求:HttpRequest對象

http響應:HttpResponse對象

所在位置:django.http

之前我們用到的參數request就是HttpRequest 檢測方法:isinstance(request,HttpRequest)

1 HttpRequest對象的屬性和方法:

技術分享圖片
 1 # path:       請求頁面的全路徑,不包括域名
 2 #
 3 # method:     請求中使用的HTTP方法的字符串表示。全大寫表示。例如
 4 #
 5 #                    if  req.method=="GET":
 6 #
 7 #                              do_something()
 8 #
 9 #                    elseif req.method=="POST":
10 #
11 #                              do_something_else()
12 #
13 # GET:         包含所有HTTP GET參數的類字典對象
14 #
15 # POST:       包含所有HTTP POST參數的類字典對象
16 #
17 #              服務器收到空的POST請求的情況也是可能發生的,也就是說,表單form通過
18 #              HTTP POST方法提交請求,但是表單中可能沒有數據,因此不能使用
19 #              if req.POST來判斷是否使用了HTTP POST 方法;應該使用  if req.method=="POST"
20 #
21 #
22 #
23 # COOKIES:     包含所有cookies的標準Python字典對象;keys和values都是字符串。
24 #
25 # FILES:      包含所有上傳文件的類字典對象;FILES中的每一個Key都是<input type="file" name="" />標簽中                     name屬性的值,FILES中的每一個value同時也是一個標準的python字典對象,包含下面三個Keys:
26 #
27 #             filename:      上傳文件名,用字符串表示
28 #             content_type:   上傳文件的Content Type
29 #             content:       上傳文件的原始內容
30 #
31 #
32 # user:       是一個django.contrib.auth.models.User對象,代表當前登陸的用戶。如果訪問用戶當前
33 #              沒有登陸,user將被初始化為django.contrib.auth.models.AnonymousUser的實例。你
34 #              可以通過user的is_authenticated()方法來辨別用戶是否登陸:
35 #              if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
36 #              時該屬性才可用
37 #
38 # session:    唯一可讀寫的屬性,代表當前會話的字典對象;自己有激活Django中的session支持時該屬性才可用。
39 
40 #方法
41 get_full_path(),   比如:http://127.0.0.1:8000/index33/?name=123 ,req.get_full_path()得到的結果就是/index33/?name=123
42 req.path:/index33
View Code

註意一個常用方法:request.POST.getlist(‘‘)

2 HttpResponse對象:

對於HttpRequest對象來說,是由django自動創建的,但是,HttpResponse對象就必須我們自己創建。每個view請求處理方法必須返回一個HttpResponse對象。

HttpResponse類在django.http.HttpResponse

在HttpResponse對象上擴展的常用方法:

1 頁面渲染:         render()(推薦)<br>                 render_to_response(),
2 頁面跳轉:         redirect("路徑")
3 locals():    可以直接將函數中所有的變量傳給模板

補充:

技術分享圖片
 1 -----------------------------------url.py
 2 
 3  url(r"login",   views.login),
 4  url(r"yuan_back",   views.yuan_back),
 5 
 6 -----------------------------------views.py
 7 def login(req):
 8     if req.method=="POST":
 9         if 1:
10             # return redirect("/yuan_back/")
11             name="yuanhao"
12 
13             return render(req,"my backend.html",locals())
14 
15     return render(req,"login.html",locals())
16 
17 
18 def yuan_back(req):
19 
20     name="苑昊"
21 
22     return render(req,"my backend.html",locals())
23 
24 -----------------------------------login.html
25 
26 <form action="/login/" method="post">
27     <p>姓名<input type="text" name="username"></p>
28     <p>性別<input type="text" name="sex"></p>
29     <p>郵箱<input type="text" name="email"></p>
30     <p><input type="submit" value="submit"></p>
31 </form>
32 -----------------------------------my backend.html
33 <h1>用戶{{ name }}你好</h1>
34 
35 #總結: render和redirect的區別:
36 #   1 if render的頁面需要模板語言渲染,需要的將數據庫的數據加載到html,那麽所有的這一部分
37 #     除了寫在yuan_back的視圖函數中,必須還要寫在login中,代碼重復,沒有解耦.
38 
39 #   2 the most important: url沒有跳轉到/yuan_back/,而是還在/login/,所以當刷新後
40 #     又得重新登錄.
View Code

Django---URL、Views