溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Django怎么配置使用

發(fā)布時間:2022-03-03 16:42:14 來源:億速云 閱讀:129 作者:iii 欄目:web開發(fā)

本篇內(nèi)容主要講解“Django怎么配置使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Django怎么配置使用”吧!

1. 準(zhǔn)備工作

    使用pip安裝: pip install Django

2. 基本配置

    1)創(chuàng)建django程序

       a. 終端命令: django-admin startproject mysite , IDE創(chuàng)建django程序時,本質(zhì)上都是自動執(zhí)行上述命令

    2)目錄結(jié)構(gòu)如下:

Django怎么配置使用

3)配置文件 --  (settings.py)

    a. 數(shù)據(jù)庫

   Django怎么配置使用

   b. 模板

  Django怎么配置使用

  c. 靜態(tài)文件

   Django怎么配置使用

3. 創(chuàng)建App

    a. 命令 

        python manage.py startapp cmdb

       Django怎么配置使用

    b. cmdb 目錄結(jié)構(gòu)如下:

    Django怎么配置使用

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ù)如下

Django怎么配置使用

總結(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é)果:

Django怎么配置使用

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é)果:

Django怎么配置使用

 最終的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("字符串")

 6. 基于正則表達式的URL

    簡單例子如下:

    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/, 頁面如下: 

Django怎么配置使用

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)到另一個頁面,如下:

Django怎么配置使用

7. 一類url方式的優(yōu)化

 以上 上方的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)化寫法

Django怎么配置使用

b.views的優(yōu)化寫法

Django怎么配置使用

c. html模板的優(yōu)化寫法

Django怎么配置使用

d. 瀏覽頁面訪問效果

Django怎么配置使用

 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í)!

向AI問一下細節(jié)

免責(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)容。

AI