1. 程式人生 > >Django框架學習01--環境搭建和檢視(修改版)

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)

圖一:欄位

這裡寫圖片描述

圖二:過濾

這裡寫圖片描述

圖三:分頁效果

這裡寫圖片描述