您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Django怎么配置使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Django怎么配置使用”吧!
使用pip安裝: pip install Django
1)創(chuàng)建django程序
a. 終端命令: django-admin startproject mysite , IDE創(chuàng)建django程序時,本質(zhì)上都是自動執(zhí)行上述命令
2)目錄結(jié)構(gòu)如下:
3)配置文件 -- (settings.py)
a. 數(shù)據(jù)庫
b. 模板
c. 靜態(tài)文件
a. 命令
python manage.py startapp cmdb
b. cmdb 目錄結(jié)構(gòu)如下:
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文件,定義路由規(guī)則
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. 定義視圖函數(shù):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模板獲取 字典數(shù)據(jù)
<!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 %} #循環(huán)字典 <li>{{ k }} : {{ v }}</li> {% endfor %} </ul> </body> </html>
e. 通過瀏覽器訪問: http://127.0.0.1:8000/login/ ,顯示login.html登錄頁面,輸入登錄信息,登錄成功后,獲取的數(shù)據(jù)如下
總結(jié):通過上面的例子,我們可以知道django的生命周期:
---->URL對應(yīng)關(guān)系(匹配) --->視圖函數(shù) --->返回用戶字符串
----> URL對應(yīng)關(guān)系(匹配) --->視圖函數(shù) --->打開一個HTML文件,讀取內(nèi)容
5. 其他
request.GET.get('',None) #獲取get請求發(fā)來的數(shù)據(jù) request.POST.get('',None) #獲取post請求發(fā)來的數(shù)據(jù) return render(request, 'HTML模板的路徑') return redirect('只能填寫URL')
對應(yīng)多選框、上傳文件怎么獲取值呢?
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')
頁面訪問結(jié)果:
b. 上傳文件
主要方法
文件對象 = request.FILES.get('xx') 文件名 = 文件對象.name 文件大小 = 文件對象.size 文件內(nèi)容 = 文件對象.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表示所有的數(shù)據(jù)庫,是個迭代器 fw.write(line) fw.close()
頁面訪問結(jié)果:
最終的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表示所有的數(shù)據(jù)庫,是個迭代器 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文件,定義路由規(guī)則
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 ,循環(huán)字典信息
點擊任意信息可跳轉(zhuǎn)到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. 點擊頁面上任意信息,可以跳轉(zhuǎn)到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超鏈接,跳轉(zhuǎn)到另一個頁面,如下:
以上 上方的detail頁面get請求時,使用的形式是 http:127.0.0.1:80/detail?nid=x 方式,nid的是動態(tài)獲取,若覺得改方式比較low,可以更改為以下方式:
http://127.0.0.1:80/detail-x.html
a. url的優(yōu)化寫法
b.views的優(yōu)化寫法
c. html模板的優(yōu)化寫法
d. 瀏覽頁面訪問效果
8. 若urls進行了變更,那么涉及的urls也需要改動,多次變更后,可能修改就會有遺漏,有什么高效的解決方法嗎?
a. 找到urls.py文件,修改路由規(guī)則
# 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+)里的內(nèi)容 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>字典循環(huán)獲取</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怎么配置使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。