1. 程式人生 > >Python的Django框架應用(1)

Python的Django框架應用(1)

一、java的Servlet程式設計

在java網路程式設計中,主要分為資料訪問層,表示層,業務邏輯層,以及實體層。這裡就簡單介紹一下各個分層之間的關係。各部分的關係圖如下:
這裡寫圖片描述

二、python的Django框架

Python下有許多款不同的 Web 框架。Django是一個開放原始碼的Web應用框架,由Python寫成。Django採用了MVC的軟體設計模式,即模型M,檢視V和控制器C。

三、MVC模型是什麼?

MVC全名是Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於對映傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中。

四、建立Django專案

Django框架的官網是:https://www.djangoproject.com
注意:目前Django 1.6.x以上版本已經完全相容Python 3.x。
python的安裝這裡就不詳細介紹了。本部落格只介紹Django框架的應用。本博主介紹的是Window系統下的安裝。

1、安裝Django框架

1.1手動安裝
下載 Django 壓縮包,解壓並和Python安裝目錄放在同一個根目錄,進入 Django 目錄,執行python setup.py install,然後開始安裝,Django將要被安裝到Python的Lib下site-packages。這是手動安裝。
1.2自動安裝(pip安裝)
檢視python裡面是否有”pip”
找到你的python的安裝路徑Python36-32\Scripts下是否有紅色方框裡的檔案:
這裡寫圖片描述


1.2.1如果沒有安裝pip
本博主在安裝好python之後,在資料夾的scripts資料夾下沒有任何關於pip的檔案所以首先配置環境變數,之後安裝pip
配置環境變數path的路徑為
D:\Python27\Scripts;D:\Python27

下載get-pip.py
get-pip.py: https://pip.pypa.io/en/latest/installing.html
將該檔案放到安裝目錄下,在cmd裡面切換路徑
python2.7環境下安裝“pip”
這裡寫圖片描述
檢驗是否安裝成功:
在CMD黑色窗口裡面輸入“pip”如果顯示‘pip’不是內部命令,也不是可執行的程式。因為我們還沒有新增環境變數或者環境變數路徑不對。
安裝失敗


在cmd上輸入pip結果如下:
這裡寫圖片描述
安裝成功
1.2.1安裝Django
pip install Django [==版本號]
這裡寫圖片描述
這裡寫圖片描述

1.2、手動建立第一個Django專案

在cmd裡面建立
這裡寫圖片描述
咱們來看一下產生的檔案
這裡寫圖片描述
這裡寫圖片描述
由於直觀性和操作性不好,還是直接配置到整合環境中。本部落格用的idea。

五、用Idea來建立Django專案

1、配置pythonSDK

2、建立Django專案

3、Django專案配置檔案功能介紹

下面來介紹這app或者專案目錄下的檔案作用如下:
manage.py :一個讓你與這個Django專案以不同的方式進行互動的命令列實用程式。你可以從manage.py檔案裡面讀到任何細節。
init.py:是一個空檔案,這是一個python包的標誌。
settings.py:這裡面儲存的是Django的專案設定和配置。下面詳細介紹每個部分的作用。

"""
Django settings for myschool project.

Generated by 'django-admin startproject' using Django 1.11.3.
**這是Django的版本**
For more information on this file, see
https://docs.djangoproject.com/en/1.11/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
**#用到了python中一個神奇的變數 __file__ 這個變數可以獲取到當前檔案(包含這個程式碼的檔案)的路徑。os.path.dirname(__file__) 得到檔案所在目錄,再來一個os.path.dirname()就是目錄的上一級,BASE_DIR 即為 專案 所在目錄。我們在後面的與目錄有關的變數都用它,這樣使得移植性更強。**
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '=md$ukr#$%[email protected]*o9=&[email protected]%$5x'

# SECURITY WARNING: don't run with debug turned on in production!
**DEBUG=True 時,如果出現 bug 便於我們看見問題所在,但是部署時最好不要讓使用者看見bug的詳情,可能一些不懷好心的人攻擊網站,造成不必要的麻煩。**
DEBUG = True
**ALLOWED_HOSTS 允許你設定哪些域名可以訪問,即使在 Apache 或 Nginx 等中綁定了,這裡不允許的話,也是不能訪問的。
當 DEBUG=False 時,這個為必填項,如果不想輸入,可以用 ALLOW_HOSTS = ['*'] 來允許所有的。**
ALLOWED_HOSTS = []


# Application definition
**這是在這個專案裡面安裝的app的列表,這裡寫的路徑格是
app名字.apps.app名字Config,後面詳細介紹**
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
**中間裝置**
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
**專案根的路由列表配置路徑**
ROOT_URLCONF = 'myschool.urls'
**模板配置**
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
**伺服器閘道器介面應用配置**
WSGI_APPLICATION = 'myschool.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
**資料庫配置**
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
**授權密碼驗證配置**
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
**專案語言配置**
LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
**static 是靜態檔案所有目錄,比如 jquery.js, bootstrap.min.css 等檔案。**
STATIC_URL = '/static/'

urls.py: 這裡配置的是你的URL宣告,也就是你的專案部署位置的目錄,換句話說也就是路由規則。
請求資源的列表叫路由列表(對映)
通過查詢urls裡面的urlpatterns來決定呼叫哪個檢視函式
檢視函式的特點:函式的第一個引數代表的是請求物件,返回值,代表檢視內容,給客戶端顯示的。

"""myschool URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

wsgi.py: 你的專案的相容性伺服器閘道器介面網站服務的入口,顯示了伺服器閘道器的部署細節。

4、配置Idea的專案配置

檢視是否需要配置
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這個介面主要作用是建立資料庫裡的表和建立專案裡面的APP。
這裡寫圖片描述
將專案中加入新建立的app,在settings.py檔案裡配置
這裡寫圖片描述
建立資料庫,這裡就不詳細介紹,本部落格用mysql舉例,資料庫的名稱是newmyschool,最好還是和專案名稱相同,這裡就不講究了。在settings.py裡面配置資料庫:
這裡寫圖片描述
我還是習慣將網頁(html檔案單獨放在一個檔案和專案目錄同級),這就需要配置模板(TEMPLATES)裡的目錄(DIRS),自動查詢,否則將找不到路由規則匹配的頁面(網頁)。
這裡寫圖片描述
在app目錄下建立的urls.py(複製了專案目錄下的urls.py裡面的內容)內容如下:

"""myschool URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

5、建立實體類模型,並用該模型建立表

編輯app裡面的models.py,建立Grade類

from django.db import models

# Create your models here.
# 建立一個班級類,繼承models.Model的類
class Grade(models.Model):
    # 班級名稱,型別是字元欄位,別名是‘班級名稱’,最大長度是50(這是字元欄位必須寫的),
    # 不能為空,唯一
    name=models.CharField('班級名稱',max_length=50,null=False,unique=True)
    # 開班日期,型別日期欄位,別名‘開班日期’,這個作用之後會顯現
    createDate=models.DateField('開班日期')

建立所有app的表:
這裡就用到了上面建立的[email protected]介面

6、 makemigrations appName

這裡寫圖片描述
產生的0001_initial.py檔案的內容如下:

# -*- coding: utf-8 -*-
# Generated by Django 1.11.3 on 2017-07-12 08:25
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Grade',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=50, unique=True, verbose_name='班級名稱')),
                ('createDate', models.DateField(verbose_name='開班日期')),
            ],
        ),
    ]

從上面的內容可以看出這是生成sql語句必須生成的。
第一次執行上述操作:在idea中執行ctr+alt+r,輸入makemigrations appName,會出現錯誤,mysql資料庫的驅動,支援的只有兩種mysqlclient 或者mysql-python
用pip安裝,pip install mysqlclient 或者 pip install mysql-python
這裡寫圖片描述
產生上述錯誤就是在專案settings.py裡面沒有配置好上面的INSTALLED_APPS裡面的該app下的apps.py路徑。這裡就不在指出了。

7、sqlmigrate appName 0001

生成sql語句的一個事務
這裡寫圖片描述

8、 migrate

建立表
這裡寫圖片描述
我們來看看資料庫中生成的表:
這裡寫圖片描述
這裡只是粗略的解釋下每個表的型別,下一期將會詳細介紹每張表裡面儲存的內容。

9 、建立一個Django框架的管理app的超級使用者

這裡寫圖片描述

10、啟動伺服器

這裡寫圖片描述
這裡寫圖片描述

11、登陸管理介面

這裡寫圖片描述
管理介面
這裡寫圖片描述
由於上面全是英文選單為了使其剛好的檢視,則需要國際化處理
這裡寫圖片描述
結果如下:
這裡寫圖片描述
比較修改前更加方便。

六、將新建的app匯入到專案中

在新建的app資料夾(grade)下的admin.py
這裡寫圖片描述
這裡寫圖片描述
增加一個內容之後,檢視整個app如下圖:
這裡寫圖片描述

修改整個app的名字:

修改app(grade)裡面的models.py檔案如下:

from django.db import models

# Create your models here.
# 建立一個班級類,繼承models.Model的類
class Grade(models.Model):
    class Meta:
        # app別名的單數
        verbose_name='年級'
        # app別名的複數
        verbose_name_plural='年級'
    # 班級名稱,型別是字元欄位,別名是‘班級名稱’,最大長度是50(這是字元欄位必須寫的),
    # 不能為空,唯一
    name=models.CharField('班級名稱',max_length=50,null=False,unique=True)
    # 開班日期,型別日期欄位,別名‘開班日期’,這個作用之後會顯現
    createDate=models.DateField('開班日期')

這裡寫圖片描述
app裡面的內容按照列表進行顯示:
修改app(grade)目錄下的admin.py檔案內容如下:

from django.contrib import admin
from . import models
# Register your models here.
class Admin_grade(admin.ModelAdmin):
    list_display=['name','createDate']
admin.site.register(models.Grade,Admin_grade)

這裡寫圖片描述
確認是否將資料新增到資料庫,
再瀏覽器中增加幾條記錄
這裡寫圖片描述
這裡寫圖片描述
資料庫:
這裡寫圖片描述
這裡一個小型的Django已經建立完成。接下來會用Django框架來建立web專案。
欲知後事如何,請聽下回分解!
<本博主一直在查詢在Eclipse裡面配置Django框架,查了很多資料但是一直配置不好,希望可以在評論區中留下自己實驗過得方式連結,謝謝!>