Django學(xué)習(xí)筆記(一)

筆記來源:自強學(xué)堂-Django教程
這個教程真的非常好用!強烈推薦

Django簡介-組成部分


  • urls.py:網(wǎng)址入口,關(guān)聯(lián)到對應(yīng)的views.py中的一個函數(shù)(或者generic類),訪問網(wǎng)址就對應(yīng)一個函數(shù)。
  • views.py:處理用戶發(fā)出的請求,從urls.py中對應(yīng)過來,通過渲染templates中的網(wǎng)頁可以將顯示內(nèi)容,比如登錄后的用戶名,用戶請求的數(shù)據(jù),輸出到網(wǎng)頁。
  • models.py:與數(shù)據(jù)庫操作相關(guān),存入或讀取數(shù)據(jù)時用到這個,用不到數(shù)據(jù)庫就不使用
  • forms.py:表單。用戶在瀏覽器上輸入數(shù)據(jù)提交,對數(shù)據(jù)的驗證工作以及輸入框的生成等工作,也可以不使用。
  • templates 文件夾:views.py 中的函數(shù)渲染templates中的html模板,得到動態(tài)內(nèi)容的網(wǎng)頁,也可以用緩存來提高速度。
  • admin.py:后臺。通過少量代碼就可以擁有一個強大的后臺。
  • settings.py:Django的設(shè)置,配置文件。如DEBUG的開關(guān),靜態(tài)文件的位置。

Django 基本命令


這些命令很重要,盡量記得

  1. 新建一個django project
django-admin.py startproject project-name

一個project為一個項目,project-name 項目名稱。

  1. 新建app
#執(zhí)行該命令:新建的app與project處于一個文件project下
django-admin.py startapp app-name 
#執(zhí)行這個命令app在project-name子目錄下
#執(zhí)行這個命令的前提:cd projectname/
python manage.py startapp app-name

一般一個項目有多個app,通用的app可以在多個項目中使用

  1. 同步數(shù)據(jù)庫
#Django 1.7.1以及以上版本需要用一下命令
python manage.py makemigrations
python manage.py migrate

這種犯法可以創(chuàng)建表,當在models.py中新增了類是,運行它可以自動的在數(shù)據(jù)庫中創(chuàng)建表,不用手動創(chuàng)建。

  1. 使用開發(fā)服務(wù)器
    開發(fā)服務(wù)器:開發(fā)時使用,只用來測試,不要用于生產(chǎn)環(huán)境
python manage.py runserver
# 當提示端口被占用的時候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999
(當然也可以kill掉占用端口的進程)
# 監(jiān)聽所有可用 ip (電腦可能有一個或多個內(nèi)網(wǎng)ip,一個或多個外網(wǎng)ip,即有多個ip地址)
python manage.py runserver 0.0.0.0:8000
# 如果是外網(wǎng)或者局域網(wǎng)電腦上可以用其它電腦查看開發(fā)服務(wù)器
# 訪問對應(yīng)的 ip加端口,比如 http://172.16.20.2:8000
  1. 清空數(shù)據(jù)庫
    該命令執(zhí)行后只留下空表
  2. 創(chuàng)建超級管理員
python manage.py createsuperuser
# 按照提示輸入用戶名和對應(yīng)的密碼就好了郵箱可以留空,用戶名和密碼必填
# 修改 用戶密碼可以用:
python manage.py changepassword username
  1. 導(dǎo)出數(shù)據(jù)
#注意 導(dǎo)出的xxx.json文件位于 projectname文件夾下
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
  1. Django 項目環(huán)境終端
python mange.py shell

如果你安裝了 bpython 或 ipython 會自動用它們的界面,推薦安裝 bpython。
這個命令和 直接運行 python 或 bpython 進入 shell 的區(qū)別是:你可以在這個 shell 里面調(diào)用當前項目的 models.py 中的 API,對于操作數(shù)據(jù),還有一些小測試非常方便。

  1. 數(shù)據(jù)庫命令行
python manage.py dbshell

在這個終端可以執(zhí)行數(shù)據(jù)庫的SQL語句

  1. 更多命令
python manage.py

可以看到詳細列表,忘記命令時很好用

Django 視圖與網(wǎng)址


  1. 新建一個項目的基本步驟
#1. 新建一個項目(project), 名稱為 mysite
django-admin.py startproject mysite
#2. 新建一個應(yīng)用(app), 名稱叫 learn
#到外層那個 mysite 目錄下(不是mysite中的mysite目錄)
python manage.py startapp learn
#**把我們新定義的app加到settings.py中的****INSTALL_APPS****中**
#修改 mysite/mysite/settings.py
#如果不添加這一步,django 就不能自動找到app中的模板文件和靜態(tài)文件
#3. 定義視圖函數(shù)(訪問頁面的內(nèi)容)
#在views.py中修改 注意:coding:utf-8
#4. 定義視圖函數(shù)相關(guān)的URL(網(wǎng)址)
# mysite/mysite/urls.py
#5. 運行服務(wù)器
python manage.py runserver
  1. 其他功能
  • 在網(wǎng)頁上做加減法
    1. 采用 **/add/?a=4&b=5 **這樣GET方法進行
#views.py
from django.shortcuts import render
from django.http import HttpResponse
def add(request):
      a = request.GET['a']
      b = request.GET['b']
      c = int(a)+int(b)
      return HttpResponse(str(c))
#注:request.GET 類似于一個字典,更好的辦法是用 request.GET.get('a', 0) 當沒有傳遞 a 的時候默認 a 為 0
#urls.py
from calc import views as calc_views
url(r'^add/', calc_views.add, name='add'),  # 注意修改了這一行
#訪問http://127.0.0.1:8000/add/?a=4&b=5
2. 采用/add/3/4/這樣的網(wǎng)址方式
#views.py
def add2(request,a,b):
      c = int(a)+int(b)
      return HttpResponse(str(c))
#urls.py
url(r'^add/(\d+)/(\d+)/$',calc_views.add2,name='add2')
#訪問
http://127.0.0.1:8000/add/4/5/
  • url中name的作用
    當網(wǎng)址發(fā)生改變的時候,訪問能夠依然有效
不帶參數(shù)的:
{% url 'name' %}
帶參數(shù)的:參數(shù)可以是變量名
{% url 'name' 參數(shù) %}
例如:
<a href="{% url 'add2' 4 5 %}">link</a>

上述代碼渲染成的最終的頁面是:

<a href = "/add2/4/5">link</a>
#這樣就可以通過 {% url 'add2' 4 5 %} 獲取到對應(yīng)的網(wǎng)址 /add2/4/5/

注意:注意看重點 add2 變成了 new_add,但是后面的 name='add2' 沒改,這時 {% url 'add2' 4 5 %} 就會渲染對應(yīng)的網(wǎng)址成 /new_add/4/5/
reverse 函數(shù)也是一樣,獲取的時候會跟著變成新的網(wǎng)址
讓以前的就網(wǎng)址自動跳轉(zhuǎn)到新的網(wǎng)址:

#views.py
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def old_add2_redirect(request, a, b):
    return HttpResponseRedirect(
        reverse('add2', args=(a, b))
    )
#urls.py
url(r'^add2/(\d+)/(\d+)/$', calc_views.old_add2_redirect),
url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

Django 模板


之前都是通過簡單的django.http.HttpResponse把內(nèi)容顯示到網(wǎng)頁上,現(xiàn)在可以通過渲染模板的方式來顯示內(nèi)容。

  1. 基本步驟
#1.創(chuàng)建項目和應(yīng)用
django-admin.py startproject projectname
cd projectname
python manage.py startapp appname
#2.把應(yīng)用加入到settings.py INSTALLED_APPS當中
#3.在appname/views.py 當中寫一個首頁的視圖
from django.shortcuts import render
def home(request):
        home render(request,'home.html')
#4. 在appname下新建templates文件夾,里面新建一個home.html
#默認配置下django會自動找到app下面的templates文件夾中的模板文件
#5. 修改home.html
#6. 將視圖函數(shù)對應(yīng)到網(wǎng)址,更改projectname/urls.py
from appname import views as appname_views
urlpatterns = [
      url(r'^$',appname_views.home,name='home'),
]
#7.創(chuàng)建數(shù)據(jù)庫表
python manage.py migrate
#8.運行開發(fā)服務(wù)器
python manage.py runserver

注意幾點:

  • Django 查找模板的過程是在每個 app 的 templates 文件夾中找(而不只是當前 app 中的代碼只在當前的 app 的 templates 文件夾中找)。各個 app 的 templates 形成一個文件夾列表,Django 遍歷這個列表,一個個文件夾進行查找,當在某一個文件夾找到的時候就停止,所有的都遍歷完了還找不到指定的模板的時候就是 Template Not Found (過程類似于Python找包)。
  • 模板命名規(guī)則:僅和該app相關(guān)的模板放在 app/templates/app/
  1. 循環(huán)、條件判斷、常用標簽、過濾器的使用
  • 顯示一個基本的字符串在網(wǎng)頁上
#views.py
def home(request):
        string = u'Hello world!'
        return render(request,'home.html',{'string':string})
#home.html
{{ string }}
  • 基本for循環(huán)和List內(nèi)容的顯示
  • 顯示字典內(nèi)容
  • for循環(huán)和if條件操作
  • 模板中的邏輯操作
  • 獲取當前網(wǎng)址、當前用戶
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容