您好,登錄后才能下訂單哦!
本篇內容主要講解“Django怎么配置使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Django怎么配置使用”吧!
使用pip安裝: pip install Django
1)創建django程序
a. 終端命令: django-admin startproject mysite , IDE創建django程序時,本質上都是自動執行上述命令
2)目錄結構如下:
3)配置文件 -- (settings.py)
a. 數據庫
b. 模板
c. 靜態文件
a. 命令
python manage.py startapp cmdb
b. cmdb 目錄結構如下:
4. 登錄實例
a. templates目錄下生成html文件,如login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登錄</title> </head> <body> <form action='/login/' method='POST'> <p> <input type="text" name="user" placeholder="用戶名"/> </p> <p> <input type="password" name="pwd" placeholder="密碼"/> </p> <p> 男:<input type="radio" name="sex" value="男"/> 女:<input type="radio" name="sex" value="女"/> </p> <p> <input type="submit" value="提交"/> </p> </form> </body> </html>
b. 修改url文件,定義路由規則
from django.contrib import admin from django.conf.urls import url from cmdb import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login), ]
c. 定義視圖函數:app下views.py
from django.shortcuts import render from django.shortcuts import HttpResponse from django.shortcuts import redirect # Create your views here. USER_LIST = {} def login(request): if request.method == 'GET': #判斷請求方式 return render(request, 'login.html') elif request.method == 'POST': user = request.POST.get('user') #post請求,單選、輸入框獲取值 pwd = request.POST.get('pwd') sex = request.POST.get('sex') if user and pwd: USER_LIST['name'] = user USER_LIST['pwd'] = pwd USER_LIST['sex'] = sex return render(request, 'success.html', {"user_list": USER_LIST}) else: return HttpResponse('請求不能為空') else: return HttpResponse('請求方式不是get\post') #HttpResponse("字符串")
d. 提交成功后,success.html頁面 取值, hmtl模板獲取 字典數據
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登錄成功頁面</title> </head> <body> {{ user_list.name}} #獲取字典中某個key的值 <ul> {% for k,v in user_list.items %} #循環字典 <li>{{ k }} : {{ v }}</li> {% endfor %} </ul> </body> </html>
e. 通過瀏覽器訪問: http://127.0.0.1:8000/login/ ,顯示login.html登錄頁面,輸入登錄信息,登錄成功后,獲取的數據如下
總結:通過上面的例子,我們可以知道django的生命周期:
---->URL對應關系(匹配) --->視圖函數 --->返回用戶字符串
----> URL對應關系(匹配) --->視圖函數 --->打開一個HTML文件,讀取內容
5. 其他
request.GET.get('',None) #獲取get請求發來的數據 request.POST.get('',None) #獲取post請求發來的數據 return render(request, 'HTML模板的路徑') return redirect('只能填寫URL')
對應多選框、上傳文件怎么獲取值呢?
a. 多選框,html格式如下:
multiple="multiple" 表示多選
<p> <select name="city" multiple="multiple"> <option value="bj" >北京</option> <option value="sh" >上海</option> <option value="sz" >深圳</option> </select> </p>
views 視圖頁面:
city = request.POST.getlist('city')
頁面訪問結果:
b. 上傳文件
主要方法
文件對象 = request.FILES.get('xx') 文件名 = 文件對象.name 文件大小 = 文件對象.size 文件內容 = 文件對象.chunks()
html格式, form表單需要添加屬性:
enctype="multipart/form-data"
<p> <input type="file" name="upload"/> </p>
views視圖:
# 上傳文件 upload_file_obj = request.FILES.get('upload') print(type(upload_file_obj), upload_file_obj) #<class 'django.core.files.uploadedfile.InMemoryUploadedFile'> 2.jpg #保存上傳的文件到upload目錄 upload_path = os.path.join('upload', upload_file_obj.name) fw = open(upload_path, 'wb') for line in upload_file_obj.chunks(): #chunks表示所有的數據庫,是個迭代器 fw.write(line) fw.close()
頁面訪問結果:
最終的views代碼:
from django.shortcuts import render from django.shortcuts import HttpResponse from django.shortcuts import redirect import os # Create your views here. USER_LIST = {} def login(request): if request.method == 'GET': #判斷請求方式 return render(request, 'login.html') elif request.method == 'POST': user = request.POST.get('user') #post請求,單選、輸入框獲取值 pwd = request.POST.get('pwd') sex = request.POST.get('sex') #多選獲取值 city = request.POST.getlist('city') # 上傳文件 upload_file_obj = request.FILES.get('upload') print(type(upload_file_obj), upload_file_obj) #<class 'django.core.files.uploadedfile.InMemoryUploadedFile'> 2.jpg #保存上傳的文件到upload目錄 upload_path = os.path.join('upload', upload_file_obj.name) fw = open(upload_path, 'wb') for line in upload_file_obj.chunks(): #chunks表示所有的數據庫,是個迭代器 fw.write(line) fw.close() if user and pwd: USER_LIST['name'] = user USER_LIST['pwd'] = pwd USER_LIST['sex'] = sex USER_LIST['city'] = city USER_LIST['file'] = upload_file_obj.name return render(request, 'success.html', {"user_list": USER_LIST}) else: return HttpResponse('請求不能為空') else: return HttpResponse('請求方式不是get\post') #HttpResponse("字符串")
簡單例子如下:
a. 修改url文件,定義路由規則
urlpatterns = [ # url(r'^admin/', admin.site.urls), # url(r'^login/', views.login), url(r'^index/', views.index), url(r'^detail/', views.detail), ]
b. 視圖 views
USER_DICT = { "1": {"name": "root1", "email": "qwe1@163.com"}, "2": {"name": "root2", "email": "qwe2@163.com"}, "3": {"name": "root3", "email": "qwe3@163.com"}, "4": {"name": "root4", "email": "qwe4@163.com"}, } def index(request): return render(request, 'index.html', {"user_dict":USER_DICT})
c. 模板 index.html ,循環字典信息
點擊任意信息可跳轉到detail?nid=x頁面,獲取詳細信息
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <ul> {% for k,v in user_dict.items %} <li><a target="_blank" href="/detail?nid={{ k }}">{{ v.name }}</a></li> {% endfor %} </ul> </body> </html>
d. 瀏覽器訪問 http://127.0.0.1:8000/index/, 頁面如下:
e. 點擊頁面上任意信息,可以跳轉到detail詳細頁面, detail頁面的views視圖
def detail(request): nid = request.GET.get('nid') #get請求方式,或者到nid的值,即USER_DICT的key detail_info = USER_DICT[nid] return render(request, 'detail.html', {"detail_info": detail_info})
f. detail.html模板信息如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>詳情頁面</title> </head> <body> <h2>詳細信息</h2> <h7>用戶名:{{ detail_info.name }}</h7> <h7>郵箱:{{ detail_info.email }}</h7> </body> </html>
g. 點擊root2超鏈接,跳轉到另一個頁面,如下:
以上 上方的detail頁面get請求時,使用的形式是 http:127.0.0.1:80/detail?nid=x 方式,nid的是動態獲取,若覺得改方式比較low,可以更改為以下方式:
http://127.0.0.1:80/detail-x.html
a. url的優化寫法
b.views的優化寫法
c. html模板的優化寫法
d. 瀏覽頁面訪問效果
8. 若urls進行了變更,那么涉及的urls也需要改動,多次變更后,可能修改就會有遺漏,有什么高效的解決方法嗎?
a. 找到urls.py文件,修改路由規則
# url(r'detail/', views.detail), # url(r'detail-(\d+).html/', views.detail), #正則表達式 url(r'detail-(\d+).html/', views.detail, name='detail_name'), #正則表達式
b, 找到views文件,進行修改
def index(request): # return HttpResponse('index') return render(request, 'index.html', {"user_dict": USER_DICT}) # def detail(requerst): # nid = requerst.GET.get('nid') # detail_info = USER_DICT[nid] # return render(requerst, 'detail.html', {"detail_info": detail_info}) def detail(requerst,nid): # nid指定的是(\d+)里的內容 detail_info = USER_DICT[nid] return render(requerst, 'detail.html', {"detail_info": detail_info})
c. 在templates目錄下的index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>字典循環獲取</title> </head> <body> {{ user_dict.KEY1 }} <!-- <ul> {% for k,v in user_dict.items %} <li><a target="_blank" href="/detail?nid= {{ k }}">{{ v.name }}</a></li> {% endfor %} </ul> <ul> {% for k,v in user_dict.items %} <li><a target="_blank" href="/detail-{{ k }}.html">{{ v.name }}</a></li> {% endfor %} </ul> --> <ul> {% for k,v in user_dict.items %} <li><a target="_blank" href="{% url "detail_name" k %}">{{ v.name }}</a></li> {% endfor %} </ul> </body> </html>
到此,相信大家對“Django怎么配置使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。