Django框架-基礎篇

Django框架簡介

1、軟件架構模式MVC和MTV

一、MVC模型

MVC(model view controller)是軟件工程中的一種軟件架構模式,把軟件系統分爲三個基本部分:模型(model)、視圖(view)和控制器(controller),具備耦合性低,重用性高,生命週期成本低等優勢。css

 

二、MTV模型

Django框架的設計模式借鑑了MVC框架的思想,也是分別三部分,來下降各個部分之間的耦合性。html

Django的MTV分別表明:前端

  Model(模型):和數據庫相關的,負責業務對象與數據庫的對象(ORM)python

  Template(模板):放全部的html文件,負責如何把頁面展現給用戶mysql

           模板語法:目的是將自變量(數據庫的內容)如何巧妙的嵌入到html頁面中web

  View(視圖):負責業務邏輯,並在適當的時候調用Model和Templatesql

  此外,Django還有一個URL分發器。它的做用是將一個個URL的頁面請求分別發給不一樣的Views處理,Views再調用相應的Model和Template。shell

三、MVC和MTCV的比較

2、Django 下載安裝

查看django版本:數據庫

cmd——>python -m django --version

pycharm——> import django ; print(django.version)

   命令行下載安裝:

dos窗口中:
pip  install  django== 1.11.15 # 等號後爲版本號,不加的話默認安裝最新版本
pip  install  -i  https://pypi.doubanio.com/simple/  django==1.11.15(或者-i 指定源)

  pycharm的方式安裝

打開pycharm -->file -->settings --> project interpreter --> 點擊右側綠色加號 -->在彈出對話框中輸入django -->選中specify version,指定下載版本,默認最高版  -->最後點擊左下角 install package

注:默認從https://pypi.python.org/simple下載模塊,可更改國內的豆瓣源,點擊install package 右側的Manage Repositories 在裏面添加其它的源,如https://pypi.doubanio.com/simple/

詳細見下圖:django

3、建立Django項目對象

  命令行建立:

切換目錄到預存放項目文件的文件目錄

django-admin  startproject   項目名稱

eg:  django-admin  startproject    myblog

生成目錄結構以下:

  • manage.py------啓動文件 (Django項目裏面的工具,經過它能夠調用Django shell的數目和數據庫等)
  • settings.py------包含了項目的一些設置,包括數據庫信息、調試標誌以及其餘一些工做的變量。
  • urls.py-----------路徑與視圖函數的映射關係
  • wsgi.py ...........幫咱們實現socket,響應http請求

  注:命令行建立,不會建立templates模板【用於僅存放html文件,css,js等靜態文件放到新建的static目錄中】,

須要本身在項目根目錄即與manage.py同級目錄下建立templates文件夾,且要到settings.py中修改templates的DIRS中加入os.path.join(BASE_DIR,'templates')

  pycharm方式建立

 打開pycharm--->file ---->new project ---> 選中django 

 

 建立完成後項目目錄結構以下:

注:上面app01爲建立的一個應用,Mysite爲建立django目錄時,自動在項目名下創建一個同名的目錄。

4、啓動Django項目

  一、命令行方式

切換到django項目根目錄下(含有manage.py 的文件)
# 默認爲本地,端口爲8000
python manage.py runserver    # 127.0.0.1:8000  
# 可修改端口
python manage.py runserver 80   # 127.0.0.1:80
# 可修改ip和端口,4個零表示全部人均可以訪問
python manage.py runserver 0.0.0.0:80   # 0.0.0.0:80


注:當項目上線後,需將ip和端口改成實際的

  二、pycharm方式

一個項目就是一個包,不要單獨執行某個py文件,而是運行整個項目

5、建立應用

注:由於一個項目要實現多個功能,所以一個Django項目能夠分爲不少個APP,用來隔離不一樣功能模塊的代碼

若是不創建app也能夠執行項目,即視圖函數直接寫在urls.py中,在settings.py中配置相關的模板,數據庫信息,靜態文件等信息。

  命令行建立app

python manage.py  startapp  應用名

eg: python manage.py startapp  app01

執行命令後,項目目錄下多出一個app01的文件夾,目錄結構以下:

app01/
    migrations         記錄修改models即orm操做數據庫的更改信息,每次更改都會在改目錄下新建一個文件
        __init__.py     
    __init__.py        
    admin.py           
    apps.py            記錄app信息,當在settings.py中註冊app時是今後處找
    models.py          記錄建立類【即至關如向數據庫中建立表】在此處建立
    tests.py           
    views.py           本app本身的業務邏輯函數即視圖函數寫在這裏

  使用PyCharm建立

可使用PyCharm的manage.py工具來執行命名。在主菜單欄中選擇Tools,在下拉菜單中選擇Run manage.py task,會出現以下圖所示的工具對話框:


在彈出的命令窗口中直接輸入下面的命令即可建立app:

startapp app01

使用PyCharm的manage.py工具執行命令時,只用輸入命令及參數便可,再也不輸入python manage.py了。

  註冊app應用

建立完app後,想要使用,需先註冊才能使用,在django根目錄下的settings.py文件中的INSTALLED_APPS模塊中註冊app信息

格式以下:

應用名.apps.應用名Config
示例:【本質是導入應用目錄下apps中爲app創建的類】
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'classModel.apps.ClassmodelConfig' ]

apps.py文件內容以下圖:

6、配置django項目與數據庫mysql的鏈接

一、安裝mysql數據庫軟件

二、安裝 模塊pymysql【python3.6後鏈接mysql只能用pymysql】

cmd--> pip3  install pymysql

三、手動鏈接數據庫,建立一個庫及建立一個操做此數據庫的用戶,賦予權限【django的ORM只能建立表,不能建立庫】

# 建立庫
create database db_name charset utf8;
# 建立用戶及賦予權限
grant all privileges on db_name.* to 'userName'@'ip' identified by 'pwd';

四、在Django項目總配置文件setting.py同級目錄下[不是app下的__init__]的__init__.py文件中配置項目使用pymysql來操做數據庫

import pymysql

pymysql.install_as_MySQLdb()       # 告知django使用pymysql來鏈接書庫

五、在Django項目總配置文件setting.py中的DATABASES模塊中配置鏈接數據庫相關信息,格式以下

DATABASES = {
                    'default': {
                            'ENGINE': 'django.db.backends.mysql',  # 修改數據庫引擎,默認爲sqlite3文本數據庫
                            'NAME': 'db_name',
                            'USER': '**',
                            'PASSWORD':'***',
                            'HOST':'ip',
                            'PORT': 3306,     # 注意是數字,不是字符串
                        }
                    }

六、建表   在應用app的目錄下的models.py中寫類【必須繼承models.Model類

from django.db import models   # 需先導入models模塊

class Class(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=20, unique=True)

    def __str__(self):
        return self.name

# 在orm中
類      對應數據庫中的       表
對象   對應數據庫中的       記錄(數據行)
屬性   對應數據庫中的       字段

七、建好類即表後,執行數據庫遷移命令【讓建立的表在數據庫中生成】

# 記錄models.py中類是否是有變化 將變化的內容記錄下來 
python manage.py  makemigrations

# 將model的變動同步到數據庫中
python  manage.py migrate


注:執行第一條命令後models.py中的變化就會在到migrations目錄中建立一個新的文件並將變化寫入其中
若是在原有表張增長字段的話,會提示要設置默認值,由於新的那列數據不能爲空

7、項目啓動後相關配置

  一、更改setting.py 

1.一、檢查項目BASE_DIR是否以下:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

1.二、配置ALLOWED_HOSTS能夠運行本項目的ip,'*' 表明全部

ALLOWED_HOSTS = ['*',‘127.0.0.1’,‘192.168.19.66’]
注:如想別人訪問你的網站,需在啓動項目時將ip配置爲0.0.0.0,如何將運行項目的ip寫入上面列表,用戶就能夠經過你的主機ip訪問你的網站了

1.三、配置INSTALLED_APPS,爲建立的應用app進行註冊,否則操做數據庫時報錯

格式:'app_name.Apps.AppName.Config' 或 ‘app_name’

INSTALLED_APPS = [
    'classModel.apps.ClassmodelConfig'
]    

1.四、配置中間件MIDDLEWARE,註釋csrf,讓後臺可以接收全部的post請求,不關閉django將對不合法的post攔截403

將 'django.middleware.csrf.CsrfViewMiddleware'註釋掉,不然會出現下面的狀況。

 

 

注:上面的方案,不建議使用,不安全,能夠在html文件中要發送post請求的from表單里加入{% csrf_token %}就不用註釋上面的csrf的中間件了

以下圖:

 

前端實際效果爲:

 

 

 

1.五、配置模塊templates 中的DIRS須要檢查下是否爲空,若是爲空,添加上os.path.join(BASE_DIR,'templates')

命令建立的項目未建立模板templates目錄,需本身建立。

這是模板中沒有設置,設置模板在python安裝目錄中找到以下圖的路徑,打開settings.py-tpl,相同位置添加上上os.path.join(BASE_DIR,'templates')。下次建立項目就可再也不手動添加。

1.六、settings.py中增長靜態文件目錄STATICFILES_DIRS【(js,css,image)存放目錄】,這是放在templates中html文件可以使用js,css資源的關鍵

在項目根目錄即與manage.py文件同級下建立靜態文件夾static,若是有多個就建立多個,但網頁中不管是放在那個文件中,開始都以/static/開頭

1.七、templates文件夾下建立/或存放HTML文件,將html的js,css,imgs等文件放入images

  二、編輯urls.py文件,增長映射關係。

 業務函數的實現,業務函數與url的映射可都在此文件中書寫,之後規範化,可將業務函數移入到應用的views.py中,此文件僅編輯業務函數與url的映射關係,再導入views.py中全部的業務函數

from app名 import views

下圖爲:直接將視圖函數寫在全局urls.py文件中

8、訪問web

  一、局域網中的瀏覽器輸入HTTP://IP:PORT/login 就可訪問驗證。

9、如何徹底的刪除一個應用app? 

1.刪除models.py 

  不管是刪除一個單獨的model仍是刪除整個App,都須要首先刪除models.py文件中的模型。

確認沒有其餘文件引用models.py中的類。

遷移或者刪除你的數據庫,Django提供了簡便的方法方便用戶刪除某App下的全部數據(Django 1.7)。

python  manage.py migrate your_app_name zero   

  刪除models.py中的數據模型。

2.刪除App

  再次確認其餘App中沒有引用此App的文件

  刪除整個App文件夾

  在settings.py的Installed Apps中移除該app

  在urls.py中移除該App相關內容。 

 10、Django快速開發配置小結:

在app的models.py建立類(即數據庫中的表)
在views.py下建立業務視圖函數[導入orm模塊]
  from django.shortcuts import render
  from django.shortcuts import HttpResponse
  from django.shortcuts import redirect
  from classModel import models

在django的templates目錄下建立前端html文件在在django的static目錄下存放js,css.images 文件在urls.py下創建映射關係  from classModel import views

相關文章
相關標籤/搜索