一、settings.py 文件配置
1. BASE_DIR
用於綁定當前項目的絕對路徑 ( 動態計算出來的 ), 所有文件都可以依懶此路徑
2. DEBUG
用於配置 Django 項目的啟用模式 , 取值 :
1. True 表示開發環境中使用 調試模式 ( 用於開發中 )
2. False 表示當前項目運行在生產環境中 ( 不啟用調試 )
3.ALLOWED_HOSTS
設置允許訪問到本項目的網絡地址列表 , 取值 :
- [] 空列表 , 表示只有 127.0.0.1, localhost, '[::1]' 能訪問本項目
- ['*'] ,表示任何網絡地址都能訪問到當前項目\
- ['*.tedu.cn', 'weimingze.com'] 表示只有當前兩個主機能訪問當前項目
注意 :
如果要在局域網其它主機也能訪問此主機 , 啟動方式應使用如下模式 :python3 manage.py runserver 0.0.0.0:5000 # 指定網絡設備所有主機都可以通過 5000 端口訪問 ( 需加 ALLOWED_HOSTS = ['*'])
4.INSTALLED_APPS
指定當前項目中安裝的應用列表
5. MIDDLEWARE
用於注冊中間件
6. TEMPLATES
用於指定模板的配置信息
7. DATABASES
用於指定數據庫的配置信息
支持SQLite 3(默認)、PostgreSQL 、MySQL、Oracle數據庫的操作

# 默認是SQLit 3 的配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # MySQL的配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', #注意這里的數據庫應該以utf-8編碼 'USER': 'xxx', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', } } # 對於python3的使用者們還需要再加一步操作 # 由於Django內部連接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,所以需要使用pymysql來代替 # 如下設置放置的與project同名的配置的 __init__.py文件中 import pymysql pymysql.install_as_MySQLdb() # PostgreSQL配置 DATABASES = { 'default': { 'NAME': 'app_data', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'XXX', 'PASSWORD': 'XXX' } # Oracle配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.oracle', 'NAME': 'xe', 'USER': 'a_user', 'PASSWORD': 'a_password', 'HOST': '', 'PORT': '', } }
8. LANGUAGE_CODE
用於指定語言配置
取值 :
-
- 英文 : "en-us"
- 中文 : "zh-Hans"
9. TIME_ZONE
用於指定當前服務器端時區
取值 :
-
- 世界標准時間 : "UTC"
- 中國時區 : "Asia/Shanghai"
10. ROOT_URLCONF
用於配置根級 url 配置 'mywebsite1.urls'
如 :ROOT_URLCONF = 'mywebsite1.urls'
11. 靜態文件添加
(1)靜態文件:不能與服務器端做動態交互的文件都是靜態文件
如:圖片,css,js,音頻,視頻,html文件(部分)
(2)在 settings.py 中配置一下兩項內容:
1.配置靜態文件的訪問路徑
-
- 通過哪個url地址找靜態文件
- STATIC_URL = '/static/'
- 說明:
- 指定訪問靜態文件時是需要通過 /static/xxx或 127.0.0.1:8000/static/xxx
- xxx 表示具體的靜態資源位置
2.配置靜態文件的存儲路徑
-
- 靜態文件在服務器端的保存位置
- STATICFILES_DIRS=[ (os.path.join(BASE_DIR,'static'), ]
# 首先在項目根目錄下創建static目錄 # 接着在settings.py 文件下添加 # 配置訪問路徑 STATIC_URL = '/static/' # 默認已添加,使用靜態文件時的前綴 # 配置存儲路徑 STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), #行末的逗號不能漏 ) # 這樣在template中就可以導入static目錄下的靜態文件啦 # 例: <script src="/static/jquery-1.12.4.js"></script>
(3)訪問靜態文件
1.使用靜態文件的訪問路徑進行訪問
-
- 訪問路徑: STATIC_URL=/static/
<img src="/static/images/lena.jpg"> <img src="http://127.0.0.1:8000/static/images/lena.jpg">
2.通過 {% static %}標簽訪問靜態文件 {% static %}表示的就是靜態文件訪問路徑
-
- 加載 static {% load static %}
- 使用靜態資源時 語法:{% static '靜態資源路徑' %}

# file: url.py from . import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^show_image', views.show_image) ] - 視圖函數文件 # file: views.py from django.shortcuts import render def show_image(request): return render(request, "show_image.html")

<html> <head></head> <body> <h1>this is lena!</h1> <img src="/static/images/lena.jpg"> <h1>this is templates lena!</h1> {% load static %} <img src="{% static 'images/lena.jpg' %}"> </body> </html>
二、urls.py路由系統文件配置
URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL模式以及要為該URL模式調用的視圖函數之間的映射表;你就是以這種方式告訴Django,對於這個URL調用這段代碼,對於那個URL調用那段代碼。URL的加載是從配置文件中開始。
url 即統一資源定位符 Uniform Resource Locator
作用 :用來表示互聯網上某個資源的地址。
說明 :互聯網上的每個文件都有一個唯一的 URL ,它包含的信息指出文件的位置以及瀏覽器應該怎么處理它。
URL的一般語法格式為:
protocol :// hostname[:port] / path [?query][#fragment] (帶方括號[ ] 的為可選項) :
說明 :
1.protocol(協議)
- http 通過 HTTP 訪問該資源。 格式 HTTP://
- https 通過安全的 HTTPS 訪問該資源。 格式 HTTPS://
- file 資源是本地計算機上的文件。格式 : file:///
2.hostname(主機名)
是指存放資源的服務器的域名系統 (DNS) 主機名、域名 或 IP 地址。
3.port(端口號)
- 整數,可選,省略時使用方案的默認端口;
- 各種傳輸協議都有默認的端口號,如 http 的默認端口為 80 。
4.path(路徑)
由零或多個 “/” 符號隔開的字符串,一般用來表示主機上的一個目錄或文件地址。
5.query(查詢)
可選,用於給動態網頁傳遞參數,可有多個參數,用 “&” 符號隔開,每個參數的名和值
用 “=” 符號隔開。
6.fragment(信息片段)
字符串,用於指定網絡資源中的片斷。
例如:一個網頁中有多個名詞解釋,可使用 fragment 直接定位到某一名詞解釋。
路由地址
- url地址中不看域名部分即為路由地址
- 如 :http://www.tedu.com:8000/article/python.html的路由地址是 /article/python.html
- 路由地址決定了服務器端如何處理這個請求
Django 中的 URL 路由配置
1. settings.py 中的 ROOT_URLCONF
ROOT_URLCONF = 'mywebsite1.urls'
通過 ROOT_URLCONF 指定頂級 url 的配置
默認存在於主文件夾內 urls.py 主路由配置文件
2.urls.py 主路由配置文件
# file : <項目名>/urls.py urlpatterns = [ url(r'^admin/', admin.site.urls), ... ]
說明:urlpatterns是一個 url() 實例的列表 .
作用:該文件會包含 urlpatterns 的列表用於表示路由 - 視圖映射 , 通過 url() 表示具體映射
3.url()函數
用於描述路由與視圖函數的對應關系
模塊:from django.conf.urls import url
語法 :url(regex, views, kwargs=None, name=None)
- regex:字符串類型,匹配的請求路徑,允許是正則表達式
- views: 指定路徑所對應的視圖處理函數的名稱
- kwargs: 向視圖中傳遞的參數,如果沒有參數可以省略
- name: 為地址起別名,在模板中地址反向解析時使用
注:
每個正則表達式前面的 r 表示 '\' 不轉義的原始字符串
當 urlpatterns 內有多個 url 對象時,按自上而下的順序進行配置,一但有路由與 url 匹配成功,則后面的所有 url 被忽略.
4.二級路由(lncluding)
如果映射 url 太多怎么辦,全寫一個在 urlpatterns 顯得繁瑣,so 二級路由應用而生.
使用二級路由也可以減少代碼冗余,使代碼更加簡潔易懂.
# 原始版本 from django.conf.urls import url from . import views urlpatterns = [ url(r'^(?P<page_slug>[\w-]+)-(?P<page_id>\w+)/history/$', views.history), url(r'^(?P<page_slug>[\w-]+)-(?P<page_id>\w+)/edit/$', views.edit), url(r'^(?P<page_slug>[\w-]+)-(?P<page_id>\w+)/discuss/$', views.discuss), url(r'^(?P<page_slug>[\w-]+)-(?P<page_id>\w+)/permissions/$', views.permissions), ] # 改進版本 from django.conf.urls import include, url from . import views urlpatterns = [ url(r'^(?P<page_slug>[\w-]+)-(?P<page_id>\w+)/', include([ url(r'^history/$', views.history), url(r'^edit/$', views.edit), url(r'^discuss/$', views.discuss), url(r'^permissions/$', views.permissions), ])), ]
5.添加額外的參數
URLconfs 有一個鈎子可以讓你加入一些額外的參數到view函數中.
from django.conf.urls import url from . import views urlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}), ] ##################### def year_archive(request, foo): print(foo) return render(request, 'index.html')
在上面的例子中,如果一個請求為 /blog/2005/
, Django 將會調用函數
views.year_archive(request, year='2005',foo='bar')
.
需要注意的是,當你加上參數時,對應函數views.year_archive必須加上一個參數,參數名也必須命名為 foo.
6.別名的使用
url(r
'^index'
,views.index,name
=
'bieming'
)
url中還支持name參數的配置,如果配置了name屬性,在模板的文件中就可以使用name值來代替相應的url值.

urlpatterns = [ url(r'^index',views.index,name='bieming'), url(r'^admin/', admin.site.urls), # url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), # url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), # url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ] ################### def index(req): if req.method=='POST': username=req.POST.get('username') password=req.POST.get('password') if username=='alex' and password=='123': return HttpResponse("登陸成功") return render(req,'index.html') ##################### <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {# <form action="/index/" method="post">#} {# 這里只要使用bieming即可代替/index #} <form action="{% url 'bieming' %}" method="post"> 用戶名:<input type="text" name="username"> 密碼:<input type="password" name="password"> <input type="submit" value="submit"> </form> </body> </html>
三、視圖view
用於接收請求 , 處理請求並做出響應
視圖處理的函數的語法格式
def xxx(request[,其他參數...]): return 響應對象(HttpResponse對象)
示例:?建立一個小網站:
- 輸入網址: http://127.0.0.1:8000, 在網頁中輸出 : 這是我的首頁
- 輸入網址: http://127.0.0.1:8000/page1, 在網頁中輸出 : 這是編號為1的網頁
- 輸入網址: http://127.0.0.1:8000/page2, 在網頁中輸出 : 這是編號為2的網頁

# file : <項目名>/urls.py urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^/', views.index_view), url(r'^page1$', views.page1_view), url(r'^page2$', views.page2_view), ]

# file : <項目名>/views.py from . import views from django.http import HttpResponse def index_view(request): return HttpResponse("這是首頁") def page1_view(request): return HttpResponse("這是第1個頁面") def page2_view(request): return HttpResponse("這是第2個頁面")
(一)url 正則表達式命名分組 和 帶有參數的視圖函數
1.帶有分組的路由和視圖函數
在視圖函數內,可以用正則表達式分組 ()
提取參數后用函數位置傳參傳遞給視圖函數
一個分組表示一個參數,多個參數需要使用多個分組,並且使用個 / 隔開
如:
- http://127.0.0.1:8000/year/2018
- http://127.0.0.1:8000/year/2019
- http://127.0.0.1:8000/year/???? # 四位數字
分組:
示例

# file : <項目名>/urls.py urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^year/(\d{4})$', views.year_view), url(r'^date/(\d{4})/(\d+)/(\d+)$', views.date_view), ]

# file : <項目名>/views.py from django.http import HttpResponse def year_view(request, year): return HttpResponse("年:" + year) # 注: year綁定字符串 '2019' def date_view(request, year, month, day): return HttpResponse(year + "年" + month + "月" + day + "日") # 注: year綁定字符串 '2019'
練習:定義一個路由的格式為:
http://127.0.0.1:8000/整數/操作字符串/整數
從路由中提取數據,做相應的操作后返回給瀏覽器
如
- 輸入: 127.0.0.1:8000/100/add/200 頁面顯示結果:300
- 輸入: 127.0.0.1:8000/100/sub/200 頁面顯示結果:-100
- 輸入: 127.0.0.1:8000/100/mul/200 頁面顯示結果:20000

#路由配置文件 from django.conf.urls import url from . import views urlpatterns = [ url(r'^(\d+)/(\w{3})/(\d+)$', views.index_view), ] ------------------------------- #視圖處理文件 def index_view(req,a,op,b): a = int(a) # 轉為整數 b = int(b) if op == 'add': return HttpResponse(str(a + b)) elif op == 'sub': return HttpResponse(str(a - b)) elif op == 'mul': return HttpResponse(str(a * b)) else: return HttpResponse('不能運算!!!')
2.帶有命名分組 (?P<name>xxx)
的路由和視圖函數
- 在url 的正則表達式中可以使用命名分組(捕獲分組)
- 正表達式分名的名稱必須在view中以關鍵字傳參方式傳入,因此視圖函數必須能接收此參數
- 每個捕獲的參數都作為一個普通的python字符串傳遞給視圖(不會做類型轉換)
- urlpatterns中的每個正則表達式在第一次訪問它們時被編譯,這使得系統相當快
示例:

# file : <項目名>/urls.py # 以下示例匹配 # http://127.0.0.1:8000/person/weimingze/35 # http://127.0.0.1:8000/person/shibowen/29 # http://127.0.0.1:8000/person/xiaowei/9 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^person/(?P<name>\w+)/(?P<age>\d{1,2})',views.person_view), ]

# file : <項目名>/views.py from . import views from django.http import HttpResponse def person_view(request, name, age): return HttpResponse("姓名:" + name + " 年齡:" + age)
練習:
- 訪問地址:http://127.0.0.1:8000/birthday/四位數字/一到兩位數字/一到兩位數字
- 最終輸出: 生日為: xxxx年xx月xx日
- 如: 輸入網址: http://127.0.0.1:8000/birthday/2015/12/11 顯示為: 生日為:2015年12月11日 輸入網址: http://127.0.0.1:8000/birthday/2/28/2008 顯示為: 生日為:2008年2月28日

#路由配置文件 from django.conf.urls import url from . import views urlpatterns = [ url(r'^(\d{4})/(\d{1,2})/(\d{1,2})$', views.birthday_view), ] #視圖配置文件 def birthday_view(req,year,month,day): year = int(year) # 轉為整數 month = int(month) day = int(day) return HttpResponse('顯示為:生日為'+str(year)+'年'+str(month)+'月'+str(day)+'日')
(二)http請求中產生兩個核心對象:
http請求:HttpRequest對象 指瀏覽器端通過HTTP協議發送給服務器端的數據
http響應:HttpResponse對象 指服務器端接收到請求后做相應的處理后再回復給瀏覽器端的數據
1.http請求
根據HTTP標准,HTTP請求可以使用多種請求方法。
- HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法(最常用)
- HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
HTTP1.1 請求詳述
序號 | 方法 | 描述 |
1 | GET | 請求指定的頁面信息,病返回實體主體. |
2 | HEAD | 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
3 | POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件).數據被包含在請求體中.POST請求可能會導致新的資源的建立和/或已有資源的修改. |
4 | PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容. |
5 | DELETE | 請求服務器刪除指定的頁面. |
6 | CONNECT | HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器 |
7 | OPTIONS | 允許客戶端查看服務器的性能. |
8 | TRACE | 回顯服務器收到的請求,主要用於測試或診斷. |
2.HttpRequest對象
當請求一個頁面時,Django 創建一個 HttpRequest
對象包含原數據的請求。然后 Django 加載適當的視圖,通過 HttpRequest
作為視圖函數的第一個參數。每個視圖負責返回一個HttpResponse
目標。
HttpRequest屬性
path:字符串,表示請求的路由信息
path_info: URL字符串
method:字符串,表示HTTP請求方法,常用值:'GET'、'POST'
encoding:字符串,表示提交的數據的編碼方式
- 如果為None則表示使用瀏覽器的默認設置,一般為'utf-8'
- 這個屬性是可寫的,可以通過修改它來修改訪問表單數據使用的編碼,接下來對屬性的任何訪問將使用新的encoding值
GET:QueryDict查詢字典的對象,包含get請求方式的所有數據
POST:QueryDict查詢字典的對象,包含post請求方式的所有數據
FILES:類似於字典的對象,包含所有的上傳文件信息
COOKIES:Python字典,包含所有的cookie,鍵和值都為字符串
session:似於字典的對象,表示當前的會話,
body: 字符串,請求體的內容(POST或PUT)
environ: 字符串,客戶端運行的環境變量信息
scheme : 請求協議('http'/'https')
request.get_full_path() : 請求的完整路徑
request.get_host() : 請求的主機
request.META : 請求中的元數據(消息頭)
- request.META['REMOTE_ADDR'] : 客戶端IP地址
- request.META['HTTP_REFERER'] : 請求源地址

# file : urls.py from django.conf.urls import url from django.contrib import admin from . import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^show_info', views.show_info), ]

# file : views.py from django.http import HttpResponse def show_info(request): html = '<div>' + "請求方式: " + request.method + '</div>' html += '<div>' + "request.GET: " + str(dict(request.GET)) + '</div>' html += '<div>' + "request.POST: " + str(dict(request.POST)) + '</div>' html += '<div>' + "request.COOKIES: " + str(request.COOKIES) + '</div>' html += '<div>' + "客戶端瀏覽器協議是:request.scheme: " + request.scheme + '</div>' html += '<div>' + "客戶端的IP地址是:request.META['REMOTE_ADDR']: " + str(request.META['REMOTE_ADDR']) + '</div>' # html += '<div>' + "request.META:" + str(request.META) + '</div>' return HttpResponse(html)
3.HTTP響應
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。當瀏覽器接收並顯示網頁前,此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭用以響應瀏覽器的請求。
HTTP狀態碼的英文為HTTP Status Code。
下面是常見的HTTP狀態碼:
- 200 - 請求成功
- 301 - 資源(網頁等)被永久轉移到其它URL
- 404 - 請求的資源(網頁等)不存在
- 500 - 內部服務器錯誤
HTTP狀態碼分類:
HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,后兩個數字沒有分類的作用。HTTP狀態碼共分為5種類型:
分類 | 分類描述 |
1** | 信息,服務器收到請求,需要請求者繼續執行操作 |
2** | 成功,操作被成功接收並處理 |
3** | 重定向,需要進一步的操作以完成請求 |
4** | 客戶端錯誤.請求包含語法錯誤或無法完成請求 |
5** | 服務器錯誤,服務器在處理請求的過程中發生了錯誤 |
4.HttpRespanse對象
對於HttpRequest對象來說,是由django自動創建的,但是,HttpResponse對象就必須我們自己創建。每個view請求處理方法必須返回一個HttpResponse對象。
構造函數格式:
HttpResponse(content=響應體, content_type=響應體數據類型, status=狀態碼)
作用:向客戶端瀏覽器返回響應,同時攜帶響應體內容
參數:
content:表示返回的內容。
status_code:返回的HTTP響應狀態碼(默認為200)。
content_type:指定返回數據的的MIME類型(默認為"text/html")。瀏覽器會根據這個屬性,來顯示數據。如果是text/html,那么就會解析這個字符串,如果text/plain,那么就會顯示一個純文本。
常用的Content-Type如下:
'text/html'
(默認的,html文件)'text/plain'
(純文本)'text/css'
(css文件)'text/javascript'
(js文件)'multipart/form-data'
(文件提交)'application/json'
(json傳輸)'application/xml'
(xml文件)
注: 關鍵字MIME(Multipurpose Internet Mail Extensions)是指多用途互聯網郵件擴展類型。
其它HttpResponse響應對象
類型 | 作用 | 狀態碼 |
HttpResponseRedirect | 重定向 | 301 |
HttpResponseNotModified | 未修改 | 304 |
HttpResponseBadRequest | 錯誤請求 | 400 |
HttpResponseNotFound | 沒有對應的資源 | 404 |
HttpResponseForbidden | 請求被禁止 | 403 |
HttpResponseServerError | 服務器錯誤 | 500 |
5. render()
在HttpResponse對象上擴展的常用方法:
- 頁面渲染:render(推薦),render_to_response,
- 頁面跳轉:redirect
- locals: 可以直接將對應視圖函數中所有的變量傳給模板
值得注意的是對於頁面渲染的方法中,render和render_to_response使用方法和功能類似,但是render功能更為強大,推薦使用
render(request, template_name, context=None, content_type=None, status=None, using=None)[source]
- 結合給定的模板與一個給定的上下文,返回一個字典HttpResponse在渲染文本對象
所需的參數
template_name 一個模板的使用或模板序列名稱全稱。如果序列是給定的,存在於第一個模板將被使用。
可選參數
context 一組字典的值添加到模板中。默認情況下,這是一個空的字典。
content_type MIME類型用於生成文檔。
status 為響應狀態代碼。默認值為200
using 這個名字一個模板引擎的使用將模板。
from django.shortcuts import render def my_view(request): # View code here... return render(request, 'myapp/index.html', { 'foo': 'bar', }, content_type='application/xhtml+xml')

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>姓名:{{ name }}</h1> <h2>年齡:{{ age }}</h2> </body> </html>
urlpatterns = [ url(r'^test$', views.test_view), ] def test_view(request): person = { 'name': '王老師', 'age': 35 } # 方法2 return render(request, 'myhomepage.html', person) # 方法1 from django.template import loader # # t綁定模板對象 # t = loader.get_template("myhomepage.html") # # 用模板生成html # html = t.render(person) # # 返回給瀏覽器 # return HttpResponse(html)
6.GET方式傳參
GET請求方式中可以通過查詢(Query) 將數據傳遞給服務器
GET方式查詢參數獲取(查詢字符串 Query String)
客戶端傳遞參數給服務器端
URL格式:網址?參數名1=值1&參數名1=值2
服務器端接收參數
1.判斷resquest.method的值判斷請求方式是否是get請求
if request.method == 'GET': 去往指定的模板進行顯示 else: 接收其它請求提交的數據
2.獲取客戶端請求GET請求提交的數據
(1)語法:
-
-
- request.GET['參數名']
- request.GET.get('參數名','默認值')
- request.GET.getlist('參數名')
-
(2)能夠產生get請求方式的場合
-
-
- 地址欄手動輸入, 如: http://www.sina.com.cn/?a=100&b=200
<a href="地址?參數=值&參數=值">
- 表單中的method為get
-
<form method='get' action="/user/login"> 姓名:<input type="text" name="uname"> </form>
說明:一般查詢字符串的大小會受到瀏覽器的的限制(不建議超過2048字節)
練習:?
- 訪問地址:http://127.0.0.1:8000/sum?start=數字&stop=數字&step=數字
- 輸出結果為sum(range(start, step, stop)) 和:
- 如:
- 輸入網址: http://127.0.0.1:8000/sum?start=1&stop=101&step=1
- 頁面顯示: 結果: 5050
- 輸入網址: http://127.0.0.1:8000/sum?stop=101&step=2
- 頁面顯示: 結果: 2500
- 輸入網址: http://127.0.0.1:8000/sum?start=1&stop=101&step=2
- 頁面顯示: 結果: 2550

#路由配置文件 from django.conf.urls import url from . import views urlpatterns = [ url(r'^sum$', views.sum_view), ] #視圖配置文件 def sum_view(req): if req.method == 'GET': start = req.GET.get('start', '0') stop = req.GET['stop'] step = req.GET.get('step', '1') start, stop, step = int(start), int(stop), int(step) res = sum(range(start, stop, step)) return HttpResponse('計算結果為:%d' % res)
7.POST傳遞參數的獲取
客戶端通過表單等POST請求將數據傳遞給服務器端,如:
<form method='post' action="/user/login"> 姓名:<input type="text" name="username"> </form>
服務器端接收參數:通過 request.method 來判斷是否為POST請求,如:
if request.method == 'POST': 處理 POST 請求的數據並響應 else: 處理非 POST 請求的響應
使用post方式接收客戶端數據
語法
-
- request.POST['參數名']
- request.POST.get('參數名','')
- request.POST.getlist('參數名')
取消csrf驗證,否則Django將會拒絕客戶端發來的POST請求
取消 csrf 驗證
刪除 settings.py 中 MIDDLEWARE 中的 CsrfViewsMiddleWare 的中間件
MIDDLEWARE = [ ... # 'django.middleware.csrf.CsrfViewMiddleware', ... ]