Django框架學習01--環境搭建和檢視(修改版)
Python框架之Django01–環境搭建
一、一般公司結構簡介
在接觸python框架學習之前,首先要清楚我們做專案的基本架構,專案組以及公司的基本分類。下面我簡單做一下梳理,僅供參考。
1.專案組
(1)產品---2個人,提需求(女生為主)
(2)測試-----1-2人,功能測試
(3)前端-----寫頁面,呼叫後端提供的資料
(4)後端----2人以上,獲取資料,返給前端
(5)UI----設計頁面,1人
(6)資料庫---大型公司會有單獨崗
2.公司分類
(1)業務公司:可適當包裝 (2)技術型公司:e.g知道創於、雲和恩墨 (3) 銷售型公司:程式設計師較少,技術變動比較少
二、Python主流框架
1.web框架
所謂Web框架,就是用於開發Web伺服器端應用的基礎設施(通常指封裝好的模組和一系列的工具)。web框架可以快速的開發一個網站
2.python主流框架
Django、Flask 、 sanic(更強大)、web.py 、tornado(多用於併發) 、 twisted 、Pyramid、Bottle、Web2py等 。這裡我會著重對Django和Flask的知識進行講解
三、Django簡介
1.Django、Flask簡介:
用來做網站,包括前後分離或者前後合在一起 學習資料:GitHub;django官網,django 2.0需要python3.7版本支援
2.Django簡介
在基於Python的Web框架中,Django是所有重量級選手中最有代表性的一位,開發者可以基於Django快速的開發可靠的Web應用程式,因為它減少了Web開發中不必要的開銷,對常用的設計和開發模式進行了封裝,並對MVC架構提供了支援(MTV)。許多成功的網站和App都是基於Django框架構建的,國內比較有代表性的網站包括:知乎、豆瓣網、果殼網、搜狐閃電郵箱、101圍棋網、海報時尚網、背書吧、堆糖、手機搜狐網、咕咚、愛福窩、果庫等。
四、MVC模式(大部分的框架模式)
1.M(model):模型,進行資料庫存取,進行業務邏輯的判斷,通過和資料庫建立聯絡獲取資料庫資料
模型xxx中定義Tag欄位,sort欄位
V(view):檢視就是頁面,表現層,渲染給使用者看的頁面,根據業務邏輯選擇不同的檢視
C(controller):控制器,寫業務邏輯層,從使用者端收集使用者的輸入,將使用者輸入的指令和資料傳遞給業務模型
sql: select * from xxx where Tag = 熱門 and sort =
專案中最重要的一步不是程式碼而是業務邏輯!!
2.核心思想—-解耦(面試高頻考點)
更容易實現程式碼重用,將複雜的東西拆開,降低各個模組之間的耦合度
五、Django—-MVT模式
本質上和MVC沒有區別
Model:負責業務與資料庫(ORM)的物件,依然和資料庫進行互動
view:負責業務邏輯並適當呼叫module和Template
Template 模板,就是頁面:負責把頁面渲染展示給使用者
注意:Django中還有一個url分發器,也叫做路由,主要用於將url分發給不同的view進行處理
六、環境搭建
當電腦中有多個python版本的時候,若不同專案用python不同的版本,存在專案程式碼相容性問題。所以需要搭建環境,做專案的時候要將環境和程式碼分開,環境是環境,程式碼是程式碼,儘量不要用pycharm來建立。
1.檢視電腦中安裝的所有包===pip3 list
C:\Users\Administrator>pip3 list
注意如果是pip預設是python2,如果是pip3預設是python3
2.檢視pip安裝過的包
命令pip3 freeze
C:\Users\Administrator>pip3 freeze
asn1crypto==0.24.0
cffi==1.11.5
cryptography==2.3
idna==2.7
pycparser==2.18
PyMySQL==0.9.1
redis==2.10.6
virtualenv==16.0.0
3.python環境變數設定
python 3中會自動配置好path
python2.X版本:需要在系統高階配置中設定Path
設定好了在cmd控制檯輸入python會正常顯示
C:\Users\Administrator>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
4.windows中安裝虛擬環境
命令:pip3 install virtualenv
C:\Users\Administrator>pip3 install virtualenv
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875
bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl
(1.9MB)
11% |███▊ | 225kB 2.4kB/s eta 0:12:00
安裝成功後顯示
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0
常用引數說明cmd中輸入指令virtualenv:
-h, --help show this help message and exit
-v, --verbose Increase verbosity.
-q, --quiet Decrease verbosity.
-p PYTHON_EXE, --python=PYTHON_EXE
The Python interpreter to use, e.g.,
--python=python3.5 will use the python3.5 interpreter
to create the new environment. The default is the
interpreter that virtualenv was installed with (c:\use
rs\administrator\appdata\local\programs\python\python3
6-32\python.exe)
--clear Clear out the non-root install and start from scratch.
--no-site-packages DEPRECATED. Retained only for backward compatibility.
Not having access to global site-packages is now the
default behavior. #常用
--system-site-packages
Give the virtual environment access to the global
site-packages.
--always-copy Always copy files rather than symlinking.
--relocatable Make an EXISTING virtualenv environment relocatable --no-setuptools Do not install setuptools in the new virtualenv.
--no-pip Do not install pip in the new virtualenv.
--no-wheel Do not install wheel in the new virtualenv.
--extra-search-dir=DIR
Directory to look for setuptools/pip distributions in.
This option can be used multiple times.
--download Download preinstalled packages from PyPI.
--no-download, --never-download
Do not download preinstalled packages from PyPI.
--prompt=PROMPT Provides an alternative prompt prefix for this
environment.
--setuptools DEPRECATED. Retained only for backward compatibility.
This option has no effect.
--distribute DEPRECATED. Retained only for backward compatibility.
This option has no effect.
--unzip-setuptools DEPRECATED. Retained only for backward compatibility.
This option has no effect.
5.環境和程式碼分開
安裝好虛擬環境後,可以將環境和程式碼分開,建立單獨資料夾,環境是環境env,程式碼是程式碼wordspace,目錄中不要有中文和空格.資料夾建立見步驟7
6.執行虛擬環境—直接輸名字
C:\Users\Administrator>virtualenv
7.建立虛擬環境資料夾env
平時要單獨建環境資料夾、程式碼資料夾能用程式碼命令完成的儘量用程式碼操作,用英文路徑
【cmd命令回顧】
進入資料夾===cd 檔名
檢視當前目錄內容====dir
返回上一級目錄=== cd ..
返回上兩級目錄===cd ../../
返回上三級目錄===cd ../../../
回到根目錄 ==== cd/
c盤切換到d盤====d:+回車
shift+右鍵在此處打來命令===可在指定資料夾中開啟命令
清屏==ls
(1)建檔案命名為env,建立django環境===virtualenv –no-site-packages
這裡檔案位置選擇 D:\PythonFile\env—–>進入資料夾右擊開啟命令提示,開始安裝包
包命名為djangoenv
D:\PythonFile\env>virtualenv -p D:Python3\python.exe --no-site-packages djangoenv
#這樣安裝的可以指定對應的python版本,為指定的python版本來安裝虛擬環境
#代表執行的時候沒有其他的包
也可以不帶-p和python安裝地址,這樣會預設當前的python版本
D:\PythonFile\env>virtualenv --no-site-packages djangoenv #代表執行的時候沒有其他的包
狀態:
Using base prefix 'c:\\users\\administrator\\appdata\\local\\programs\\python\\p
ython36-32'
New python executable in D:\PythonFile\env\djangoenv\Scripts\python.exe
Installing setuptools, pip, wheel...done.
(2)安裝成功檢視檔案===dir
D:\PythonFile\env>dir
驅動器 D 中的卷是 軟體
卷的序列號是 948F-4A3C
D:\PythonFile\env 的目錄
2018/08/06 11:37 <DIR> .
2018/08/06 11:37 <DIR> ..
2018/08/06 11:37 <DIR> djangoenv
0 個檔案 0 位元組
3 個目錄 27,002,458,112 可用位元組
(3)進入Scripts資料夾,activate啟用虛擬環境
【windown命令】
activate==進入虛擬環境
deactive===退出虛擬環境
【Ubantu命令】
進入 cd env/Scripts/資料夾 在activate命令
退出 deactivate
進入資料夾
D:\PythonFile\env>cd djangoenv
進入Script檔案
D:\PythonFile\env\djangoenv>cd Scripts
啟用,證明此時進入了虛擬環境
D:\PythonFile\env\djangoenv\Scripts>activate
(4)檢視列表==pip list
啟用虛擬環境會自動彈出(djangoenv) D:\PythonFile\env\djangoenv\Scripts>,輸入pip list可檢視當下安裝列表
檢視安裝列表
(djangoenv) D:\PythonFile\env\djangoenv\Scripts>pip list
Package Version
---------- -------
pip 18.0
setuptools 40.0.0
wheel 0.31.1
注意在虛擬環境中檢視和在全域性中(退出虛擬環境後)檢視pip list看到的內容是不一樣的,虛擬環境中剛執行預設只有這三項內容
(5)虛擬環境中安裝庫(django庫、pymysql)
cmd控制檯進入虛擬環境D:\PythonFile\env\djangoenv\Scripts>activate
輸入命令分別安裝django和pymysql
pip install Django==1.11
pip install pymysql
七.建立Django專案
1.準備工作:
(1)虛擬環境中安裝庫(django庫、pymysql等)
cmd控制檯進入虛擬環境D:\PythonFile\env\djangoenv\Scripts>activate
輸入命令分別安裝django和pymysql
pip install Django==1.11 #如果沒有指定版本,直接pip install Django預設安裝最新版本
pip install pymysql
(2)在env同級目錄下建立程式碼資料夾wordspace,子檔案命名django(代表儲存django程式碼)
注:工作中一定要程式碼環境有條理分開,這已經強調過多次了
2.從虛擬環境切換到wordspace—>django資料夾
返回到虛擬環境的同級目錄
djangoenv) D:\PythonFile\env\djangoenv\Scripts>cd ../../../
路徑:用cd命令一層層進入到新建的wordspace檔案件
(djangoenv) D:\>cd pythonfile
3.建立Django專案====django-admin startproject +檔名
要使用這個命令前提一定要django安裝成功了,沒有安裝django是沒有這個命令的
(djangoenv) D:\PythonFile\Third\wordspace\django>django-admin startproject day01
建立完可以通過dir命令檢視目錄,會看到下面已經建立好了day01檔案
(djangoenv) D:\PythonFile\Third\wordspace\django>dir
驅動器 D 中的卷是 軟體
卷的序列號是 948F-4A3C
D:\PythonFile\Third\\django 的目錄
2018/08/07 20:11 <DIR> .
2018/08/07 20:11 <DIR> ..
2018/08/06 16:20 <DIR> day01
4.pycharm中設定環境,實現專案和環境繫結
注意:上面建立專案的步驟也可以在pycharm中操作,推薦使用上面的操作直接在cmd黑屏中端中操作
(1)pycharm軟體中開啟建立的新專案day01
File--> open-->找到目標資料夾day01--->ok-->選擇open in current window
(2)設定環境(新增剛建立的環境)
File-->setting-->project interpreter
在選項框中設定成剛才的環境檔案,如果沒有就找show all--->點選加號
(3)環境資料夾選擇
在virtual Enviorment選擇Existing enviorment(已存在的環境),選擇剛才建立的虛擬環境中的pyrhon.exe檔案
這樣就將專案設定在對應 的虛擬環境上面了
八、Django專案中各個檔案的意義
1.pycharm軟體中開啟建立的新專案day01
File--> open-->找到目標資料夾day01--->ok-->選擇open in current window
2.細說day01
建立的day01資料夾裡面還包含一個day01資料夾和manage.py,
其中裡面的day01檔案中包含四個python檔案
day01
day01
__ init__.py
__ settings__.py
__ urls__.py
manage.py
manage.py:一個讓你用各種方式管理 Django 專案的命令列工具, 是Django用於管理本專案的管理集工具,之後站點執行,資料庫自動生成,資料表的修改等都是通過該檔案完成。
teminal控制檯可檢視其中命令
wordspace\django\day01>python manage.py
【部分命令演示】===python manage.py runserver
Django version 1.11, using settings 'day01.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
init.py: 指明該目錄結構是一個python包,空檔案,暫無內容,在後期會初始化一些工具會使用到。
seetings.py: Django專案的配置檔案,其中定義了本專案的引用元件,專案名,資料庫,靜態資源,除錯模式,域名限制等
DEBUG = True #當為True是開啟http://127.0.0.1:8000/可以看到網頁報錯時的內容資訊
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello', #將app名字新增上,這裡假設建立的app名字為hello,就需要新增過來
]
#模板設定
TEMPLATES = ['BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], # =======放頁面的存放位置
'APP_DIRS': True,=
#資料庫設定
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #改為mysql
'NAME': '4day01',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': 3306
}
}
# 語言配置(英語、漢語)
# LANGUAGE_CODE = 'en-us' 這是英語
LANGUAGE_CODE = 'zh-hans' 這是漢語
# UTC時區設定
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
urls.py:專案的URL路由對映,就像你網站的“目錄” ,實現客戶端請求url由哪個模組進行響應。
wsgi.py:定義WSGI介面資訊,通常本檔案生成後無需改動
九、案例:第一個view檢視函式
效果:執行網頁,讓網頁返回hello world
執行原理:先接收到url請求,通過工程看到當前的url對應的是什麼檢視(views)和檢視下的方法去處理的,方法
1.建立專案
pycharm軟體中開啟建立的新專案day01
File--> open-->找到目標資料夾day01--->ok-->選擇open in current window
準備:
(1)先確保環境沒有問題runserver執行一下
(2)設定runserver啟動埠
2.建立應用
在Terminal的虛擬環境中執行命令python manage.py startapp (名字自定義取)
【例】在day01下面建立一個app命名為hello
python manage.py startapp hello====》此時會自動創建出一個hello資料夾,裡面包含了多個pythn檔案
hello中包含的檔案
migrations資料夾
_ _init_ _.py
_ _init_ _.py
admin.py
apps.py
models.py
tests.py
views.py
【檔案說明】===model和view最重要
migrations資料夾:作用不大,可刪可留
admin.py 管理模型,django提供了一個管理後臺(通常工作中用的不多),admin檔案的操作在後臺都能看到
進入後臺看效果
(1)先在terminal控制檯輸入python manage.py runserver
會顯示出http://127.0.0.1:8000/地址
(2)網頁中開啟網址,並在url中輸入admin可以檢視到Django後臺
http://127.0.0.1:8000/admin
apps.py 用處不大
model.py 定義模型的地方
tests.py 是初始案例,做測試的(後面會講到)
views.py寫業務邏輯的地方,建立自己的檢視函式
3.url.py中設定關聯——將方法和url繫結在一起
就相當於是路由,目的是當我訪問url中hello的時候,要找到view中的方法。
注意上面要匯入!!
from django.conf.urls import url #匯入django資訊
from django.contrib import admin
from hello import views #從hello中匯入views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'hello/',views.hello) , # 目的是當我訪問url中hello的時候,要找到view中的方法
]
定義了路由之後所以在網址輸入的時候就應該是 http://127.0.0.1/hello,
開啟這個網頁後返回的內容就應該是views檔案中hello方法中內容
4.在view.py中定義方法(重要!!)
(1)在view中定義了一個hello的方法。這個方法返回的是hello world (2)引數為request請求,否則報錯,請求中設定GET方法,一般網頁訪問都用GET請求 (3)發出請求返回東西的時候需要加HttpResponse,用之前需要先在上面匯入一下包,否則報紅線錯誤,快捷鍵alt+Enter提示
from django.shortcuts import render # 這句命令是該檔案中原有的,自動生成的語句
from django.http import HttpResponse #匯入HttpResponse包
def hello(request):
if request.method == 'GET':
return HttpResponse('hello world')
# 在view中定義了一個hello的方法。引數為request,這個方法返回的是hello world
5.在settings.py中設定===載入app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello', #寫上hello可以將我們的app載入進來
]
還可以修改語言和時區時間
LANGUAGE_CODE = 'en-us' #改為中文'zh-han'
TIME_ZONE = 'UTC' #改為'Asia/Shanghai'中國時間
USE_I18N = True
USE_L10N = True
USE_TZ = True
6.顯示hello world
(1)在terminal控制檯輸入python manage.py runserver ,找到執行網址
(2)開啟網頁,url中輸入預設地址+hello
http://127.0.0.1:8000/hello
會顯示結果
【補充】設定runserver自動執行
開啟執行控制檯defauit
script path =====找到對應的專案中的manage.py檔案
Parameters====runserver
改埠
在剛才的runserver後面可以加引數
Parameters====runserver 8080 代表指定8080埠
十、超級使用者建立(管理Django後臺)
電腦先要啟動Mysql,windows 的cmd中輸入net start mysql57
1.如何訪問
在應用網址後面輸入admin可以進入管理後臺,我們只需要建立使用者名稱和密碼就可訪問
url中輸入
http://127.0.0.1:8080/admin
2.設定資料庫===seting.py中設定
要想設定使用者名稱和密碼就需要資料,這裡就要用到資料庫,在setting.py檔案中DATEBASES設定
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',=====>後面改為mysql
'NAME':'4day01' , #名字命名為4day01
# 預設一般都是root
'USER':'root',
'PASSWORD':'123456', #設定密碼
'HOST':'localhost', # 能訪問的資料庫地址,本地就寫localhost
'PORT':3306, # 埠名
}
}
語言時間設定
# 語言配置(英語、漢語)
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# UTC時間設定
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
3.在navicat中建立資料庫
右擊”新建資料庫“設定資料庫名、字符集、排序規則
注意:**資料庫名字命名沒有硬性要求但是要和python中資料庫設定一致**
資料庫名 4day01
字符集 utf8--UTF-8 Unicode
排序規則 utf8_general_ci
4.初始化Mysql
工程目錄下init檔案中
在python3中必須有這一步操作,如果沒有安裝pymysql先安裝pip install pymysql 在進行下列操作
import pymysql
pymysql.install_as_MySQLdb()
5.遷移表==python manage.py migrate
使用者名稱和密碼都是在表中,有了資料庫我們還要為資料庫建立表,這裡不在nivicat中直接建立,在python中建立
python manage.py migrate
【注意】資料遷移程式碼的用法
第一次遷移:
python manage.py migrate
後面再次遷移:(用兩組命令)
python manage.py makemigrations #在app\migrations生成檔案0001_initial.py
python manage.py migrate
【注】在遷移過程中若沒生成.py檔案,需要後面新增app路徑
執行完畢重新整理資料庫中4day01中的表會生成Django自帶的表(10個表)
auth_group
auth_group_permission
auth_permission
auth_user #用來儲存後臺登入的使用者名稱和密碼
auth_user_groups
auth_user_user_permission
django_admin_log
django_content_type
django_migrations #用來記錄遷移的賬戶和密碼
django_session
6.建立超級使用者
(1)在terminal中執行命令
建立超級使用者,用來設定使用者名稱和密碼
python manage.py createsuperuser
(2)設定資訊
輸入使用者名稱、郵箱、密碼,注意密碼不能全數字,要大於8個字元
(djangoenv) D:\PythonFile\Third\wordspace\django\dayT>python manage.py createsuperuser
Username (leave blank to use 'administrator'): admin #這裡使用者名稱命名admin
Email address: 123@qq.com #郵箱隨意
Password: #密碼輸入無回顯這裡設定12345678a
Password (again):
此時建立的賬戶和密碼設定在資料庫的uer表中
7.登入後臺
輸入使用者名稱和密碼可登入Django後臺
十一、定義模型管理後臺
通過對模型的操作,實現操作Mysql資料庫(不寫sql語句在django後臺實現對資料庫的資訊crud操作)
1.model.py中建立模型
from django.db import models
# 定義一個模型,
class Student(models.Model):
#模型中兩個欄位s_name和s_age
s_name = models.CharField(max_length=10, unique=True)
s_age = models.IntegerField(default=16)
#定義模型中資料庫的表名,如果不定義表名則生成表名字預設是appname
class Meta:
db_table = 'student'
此時在本地資料庫中重新整理資料庫,會自動生成一個student表,裡面有s_name,s_age欄位
2.admin.py中設定方法,控制後臺顯示內容
下面定義的四個方式可以分別進行測試,檢視效果
from django.contrib import admin
from app.models import Student
class StudentAdmin(admin.ModelAdmin):
# 定義一個列表展示,此時後臺的展示方式會新增這三個欄位(如下圖一)
list_display = ['id', 's_name', 's_age']
# 新增後臺的過濾展示
list_filter = ['s_age', 's_name']
# 搜尋,例如按照名字搜尋
#search_fields = ('s_name')
# 分頁
list_per_page = 2
admin.site.register(Student, StudentAdmin)
圖一:欄位
圖二:過濾
圖三:分頁效果