Django 學習筆記

Django學習資源

https://code.ziqiangxuetang.com/learn_share/django-learn-resource.html

Django 2.x學習

第一篇

Python新手學 Django 2.0 架構的16堂課

第一課 網站開發環境建立

概念

? 1、MVC(Model View Controller):Django 通過MVC概念把視圖和控制邏輯分割開來,讓程序設計人員可以盡量不用擔心網站通信協議的繁瑣細節而專心于要簡歷的網站功能。

? 2、virtuallenv設置管理python 的虛擬機環境

    - pip install virtualenv
    - virtualenv VENV
    - source VENV/bin/activate

? 3、

第二課 Django網站快速入門

1、創建項目

#使用獨立的虛擬python 運行環境
(1)創建專用的文件夾:mkdir Django_mblog
(2)在此Django_mblog目錄下: source VENV/bin/activate
(3)安裝python Django環境:
    (VENV)$ pip install django
    (VENV)$ django-admin startproject mblog
    (VENV)$ cd mblog
    (VENV)$ git init
    (VENV)$ git add .
    (VENV)$ git commit -m 'first commit'
    (VENV)$ git remote add origin https://YuanQiLvXi@bitbucket.org/YuanQiLvXi/mblog.git
    (VENV)$ git push origin master
    (VENV)$ python manage.py startapp mainsite
    (VENV)$ python manage.py migrate    

Django 文件夾與文件解析

manage.py

? manage.py 是Django 用來管理網站配置的文件,是一個接受命令行指令的工具程序,Django所有命令都是運行在此程序,平時不會修改它。


setting.py

? 是此網站的系統設置所在的位置,新創建的網站都要先打開這個文件,進行編輯設置的操作。真正的網站所有運行的邏輯都是在使用startapp 創建出來app文件中,使用這樣的方式是讓網站的每個主要功能都稱為一個單獨的模塊,方便網站的開發者在不同的網站中重復使用

# 添加創建的app模塊
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'APP_NAME'
]
# 修改時區
LANGUAGE_CODE = 'zh-CN'
TIME_ZONE = 'Asia/shanghai'
USE_TZ = False
#修改訪問地址
ALLOWED_HOSTS = ['*']

urls.py

? 用來設置每一個URL的網址要對應的函數以及對應的方式

2、創建博客數據表

(1)數據庫與Django的關系

? 在默認情況下,Django的數據庫是以model的方式來操作的,也就是在程序中不直接面對數據庫以及數據表,而是以class類先創建好的model,然后通過對model的操作達到操作數據庫的目的。定義一個數據類來作為數據表,

(2)Django使用數據庫的操作步驟

  • 在models.py中定義需要使用的類(繼承自models.Model)
  • 詳細地設置每一個在類中的變量,即數據表中的每一個字段
  • 使用python manage.py makemigrations APP_NAME 創建數據庫和Django間的中介文件
  • 使用python manage.py migrate 同步更新數據庫的內容
  • 在程序中使用python 的方法操作所定義的數據類,等于是在操作數據庫中的數據表。

(3)定義數據類型

? 修改mainsite/models.py的內容,添加數據表

from django.db import models
from django.utils import timezone

# Create your models here.

class Post(models.Model):                       
    title = models.CharField(max_length=200)
    slug = models.CharField(max_length=200)
    body = models.TextField()
    pub_date = models.DateTimeField(default=timezone.now)
    
    class Meta:
        ordering = ('-pub_date',)
        
    def __str__(self):
        return self.title
    
在models.py中創建一個類,到時會在數據庫中有一個對應的數據表. title 用來顯示文檔的標題,slug是文章的網址,body是文章的內容,pub_date是發布的時間。
class Meta 內的設置要指定文章顯示的順序是以pub_date為依據
__str__ 提供此類所產生的數據項

問題1、Django中的模塊
問題2、model.py 格式
問題3、Django如何連接mysql 之類的數據庫

django中ORM模型建立步驟

  1. 建立一張表(在數據庫中,手動)
  2. 在django中配置數據庫
  3. 新建app
  4. 將app添加到installed_apps列表中
  5. 寫模型(類的形式)
  6. 映射到數據庫中

問題1、Django中的模塊

問題2、model.py編寫格式

問題3、Django 如何連接mysql

(4)啟動admin管理界面

admin是Django默認的數據庫內容管理界面。

  • 創建管理員賬號和密碼: python manage.py createsuperuser
  • 將mainsite/module.py中自定義的數據表加入admin,并通過admin.site.register()來設置注冊登錄
vim mainsite/admin.py

from django.contrib import admin
from .models import Post

# Register your models here.

admin.site.register(Post)


python manage.py makemigrations mainsite

python manage.py migrate

至51


一、Django 基礎介紹

1、Django特點

  • 強大的數據庫功能 :數據庫操作接口QuerySet API,如需也能執行原生SQL
  • 自帶強大后臺:幾行簡單的代碼就能讓網站擁有強大的后臺
  • 優雅的網址:用正在匹配網址,傳遞到對應函數,隨意定義,如你所想
  • 強大的模板系統
  • 緩存系統:可與redis,memcached等緩存系統聯用
  • 國際化:支持多語言應用

2、Django全貌

  • urls.py:網址入口,關聯到對應的views.py中的一個函數(或generic類),訪問網址就對應一個函數
  • views.py:處理用戶發出的請求,從urls.py中對應過來,通過渲染templates中的網頁可以將顯示內容,比如登錄后的用戶名,用戶請求的數據,輸出到網頁
  • models.py:與數據庫操作相關,存入或去讀數據是用到
  • forms.py:表單,用戶在瀏覽器上輸入數據提交,對數據的校驗工作以及輸入框的生成等工作
  • templates文件夾:views.py中的函數渲染templates中的html模板,得到動態內容的網頁,可以用緩存來提高速度
  • admin.py:后臺
  • settinspy:Django的設置,配置文件,比如DEBUG的開關,靜態文件位置等

二、Django環境搭建

Django 2.0.x 支持 Python 3.4, 3.5 和 3.6 (最后一個支持 Python 3.4 的版本)

Django 2.1.x 支持 Python 3.5, 3.6 和 3.7

Django 2.2.x 支持 Python 3.5, 3.6 和 3.7 (LTS 長期支持版本)

1、升級python版本

(1)環境準備

gcc gcc-c++庫安裝:yum install -y gcc gcc-c++
zlib zlib-devel 庫安裝: yum install -y zlib zlib-devel

(2)下載python 3.6 壓縮包

wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
tar -zxf Python-3.6.6.tgz

(3)編譯安裝

cd Python-3.6.6
./configure --prefix=/usr/local/python3 --with-ssl
make && make install

(4)將/usr/bin下python 的軟連接 重新連接到python3

ln -fs python3 python

2 、安裝 pip

更新源  sudo yum -y install epel-release
安裝   sudo yum -y install python-pip python3-pip
更新到最新版本: sudo pip install --upgrade pip

3、安裝Django

pip3 install Django==2.2.7

檢查是否安裝成功:import django
               django.get_version()

三、Django 基本命令

- 新建Django project:django-admin.py startproject project_name

- 新建app:進入項目目錄下,cd project_name然后執行命令 
    python manage.py startapp app_name
 或 django-admin.py startapp app_name
# 一般一個項目有多個app,通用的app也可以在多個項目中使用

-  創建數據庫表與更改
 創建更改的文件:python manage.py makemigrations
 生成的py文件應用到數據庫:python manage.py migrate
 這種方法可以在SQL等數據庫中創建與models.py代碼對應的表,不需要自己手動執行SQL
 問題:django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17)
 解決:更新sqlite版本
 
- 使用開發服務器
 指定端口: python manage.py runserver PORT_NUM
 監聽機器所有可用的ip: python manage.py runserver 0.0.0.0:8000
 
 問題1:You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
   解決:配置migrate:python manage.py migrate
 
 問題2:運行django項目出現Invalid HTTP_HOST header: '192.168.1.111:8000'. You may need to add '192.168.1.111' to ALLOWED_HOSTS
    解決:在我們創建的項目里修改setting.py文件
    ALLOWED_HOSTS = ['*']  #在這里請求的host添加了*
   
- 清空數據庫
 python manage.py flush #此命令會詢問是 yes 還是 no, 選擇 yes 會把數據全部清空掉,只留下空表。
 
- 創建超級管理員
 python manage.py createsuperuser #按照提示輸入用戶名和對應的密碼就好了郵箱可以留空,用戶名和密碼必填
 # 修改 用戶密碼可以用:
 python manage.py changepassword username
 
- 導出數據與導入數據
 導出數據:python manage.py dumpdata appname > appname.json
 導出數據:python manage.py loaddata appname.json
 
- Django 項目終端  -- 熟練掌握
  python manage.py shell
  
    如果你安裝了 bpython 或 ipython 會自動用它們的界面,推薦安裝 bpython。
    這個命令和 直接運行 python 或 bpython 進入 shell 的區別是:你可以在這個 shell 里面調用當前項目的 models.py 中的 API,對于操作數據,還有一些小測試非常方便
  問題1: 安裝bpython
   解決: pip3 install -i https://pypi.douban.com/simple/ bpython
   
- 數據庫命令行
 python manage.py dbshell
  
- 更多命令
 終端上輸入 python manage.py 可以看到詳細的列表,在忘記子名稱的時候特別有用。

四、Django 正式開始

1、Django 視圖與網址

Django中網址是寫在 urls.py 文件中,用正則表達式對應 views.py 中的一個函數(或者generic類)

(1)創建mysite項目

django-admin startproject mysit
 mysite
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

(2)新建一個應用(app),名稱叫learn

python3 manage.py startapp learn

mysite中多一個learn文件夾
learn
├── __init__.py
├── admin.py    后臺相關的設置
├── apps.py     app相關的設置文件
├── migrations  數據庫變更相關
│   └── __init__.py
├── models.py   數據庫模型相關
├── tests.py    單元測試
└── views.py    視圖邏輯

(3)把新定義的app加到settings.py中的INSTALL_APPS中

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'learn',   # 注意添加了這一行
]
新建的 app 如果不加到 INSTALL_APPS 中的話, django 就不能自動找到app中的模板文件(app-name/templates/下的文件)和靜態文件(app-name/static/中的文件) 

(4)定義視圖函數(訪問頁面時的內容)

我們在learn這個目錄中,把views.py打開,修改其中的源代碼,改成下面的
from django.http import HttpResponse
def index(request):
    return HttpResponse("歡迎光臨 自強學堂!")
    
第一行引入HttpResponse,它是用來向網頁返回內容的,就像Python中的 print 一樣,只不過 HttpResponse 是把內容顯示到網頁上
我們定義了一個index()函數,第一個參數必須是 request,與網頁發來的請求有關,request 變量里面包含get或post的內容,用戶瀏覽器,系統等信息在里面
函數返回了一個 HttpResponse 對象,可以經過一些處理,最終顯示幾個字到網頁上

問題:那問題來了,我們訪問什么網址才能看到剛才寫的這個函數呢?怎么讓網址和函數關聯起來呢?

(5)定義視圖函數相關的URL(即規定 訪問什么網址對應什么內容)

打開 mysite/mysite/urls.py 這個文件, 修改其中的代碼:
from django.contrib import admin
from django.urls import path
from learn import views as learn_views  # new

urlpatterns = [
    path("", learn_views.index),  # new
    path('admin/', admin.site.urls),
]

https://docs.djangoproject.com/en/2.2/topics/http/urls/

(6)在網頁上做加減法

- 采用/add/?a=4&b=5方式
  創建project
  創建app
  將app加入到settings.py中
  編寫app目錄下的views.py
    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))
  在urls.py 中添加此views
  from calc import views as calc_views
    urlpatterns = [
        url('^add/', calc_views.add, name='add'),  # 注意修改了這一行
        url('^admin/', admin.site.urls),
    ]
   打開開發服務器訪問:python manage.py runserver 0.0.0.0:8001
     http://192.168.206.130:8001/add/?a=4&b=5

- 采用/add/3/4
其他跟上面一樣
---------------------------------------------------------------
問題:path('add/', calc_views.add, name='add') 這里的name='add'是用來干什么的

簡單說,name 可以用于在 templates, models, views ……中得到對應的網址,相當于“給網址取了個名字”,只要這個名字不變,網址變了也能通過名字獲取到。


2、Django模板

? Django模板查找機制:Django查抄模板的過程式在每個app的templates文件中找(而不只是當前app中的代碼只在當前的app的templates文件中找)。各個app的templates形成一個文件夾列表,Django遍歷這個列表,一個個文件夾進行查找,當在某個文件夾找到的時候就停止,所有都遍歷完了還找不到指定的模板的時候就會Template Not Found。

? Django模板中的循環,條件判斷,常用的標簽,過濾器:

(1)創建新項目

(2)在learn/views.py寫一個首頁的視圖

from django.shortcuts import render
 
 
def home(request):
    return render(request, 'home.html')

(3)在 learn目錄下新建一個 templates 文件夾,里面新建一個 home.html

默認配置下,Django 的模板系統會自動找到app下面的templates文件夾中的模板文件。

zqxt_tmpl
├── learn
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── templates
│   │   └── home.html
│   ├── tests.py
│   └── views.py
├── manage.py
└── zqxt_tmpl
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-37.pyc
    │   └── settings.cpython-37.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py

(4)編寫home.html

<!DOCTYPE html>
<html>
<head>
    <title>歡迎光臨</title>
</head>
<body>
歡迎光臨自強學堂
</body>
</html>

(5)將視圖函數對應到網址。zqxt_tmpl/urls.py

from django.contrib import admin
from django.urls import path
from learn import views as learn_views  # new
 
urlpatterns = [
    path('', learn_views.home, name="home"),  # new
    path('admin/', admin.site.urls),
]

(6)創建數據庫表

python manage.py migrate

(7)網站模板的設計,可以寫一個base.html來包含這些通用模板.

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}默認標題{% endblock %} - 自強學堂</title>
</head>
<body>
 
{% include 'nav.html' %}
 
{% block content %}
<div>這里是默認內容,所有繼承自這個模板的,如果不覆蓋就顯示這里的默認內容。</div>
{% endblock %}
 
{% include 'bottom.html' %}
 
{% include 'tongji.html' %}
 
</body>
</html>

- 如果需要,寫足夠的block({% block content %}<div> </div> {% endblock %})以便讓繼承的模板可以重寫該部分,include 是包含其它文件的內容,就是把一些網頁共用的部分拿出來,重復利用
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容

  • 筆記來源:自強學堂-Django教程這個教程真的非常好用!強烈推薦 Django簡介-組成部分 urls.py:網...
    LeeLom閱讀 1,564評論 0 2
  • 隨便學學。。漸漸的發現簡書沒有lark在線文檔好用了。。以后不一定會搬筆記過來了。。大概可能。 安裝 創建第一個d...
    yumiii_閱讀 495評論 0 0
  • 一、創建Django項目 1、命令行創建(startproject): windows 下打開命令提示符(win ...
    齊風魯韻2018閱讀 421評論 0 0
  • 建立第一個項目 新建工程 進入你要建立工程的目錄,鍵入如下命令(其中mysite是你的項目名稱): django-...
    小小白老鼠閱讀 735評論 0 1
  • django遷移無效問題解決 背景 Django是一個開放源代碼的Web應用框架 Django遵守BSD版權,初次...
    renyangfar閱讀 213評論 0 1