閱讀27 返回首頁    go 阿裏雲 go 技術社區[雲棲]


號稱簡明實用的Django上手教程

1 幾個基本概念 


 前置條件:假設讀者基本Python語言基礎,或者具備某種編程語言的基礎。你還熟悉web開發環境,懂些css,js,db等。

Django是什麼?

Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MVC的軟件設計模式,即模型M,視圖V和控製器C。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的。並於2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。 Django的主要目標是使得開發複雜的、數據庫驅動的網站變得簡單。Django注重組件的重用性和“可插拔性”,敏捷開發和DRY法則(Don't Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和數據模型。

-----維基百科

Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MVC的框架模式,即模型M,視圖V和控製器C。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理係統)軟件。並於2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。

----百度百科

MTV開發模式?

Django是一個基於MVC構造的框架。但是在Django中,控製器接受用戶輸入的部分由框架自行處理,所以 Django 裏更關注的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV模式。它們各自的職責如下:

(1) 模型(Model),即數據存取層 處理與數據相關的所有事務: 如何存取、如何驗證有效性、包含哪些行為以及數據之間的關係等。

(2) 視圖(View),即表現層 處理與表現相關的決定: 如何在頁麵或其他類型文檔中進行顯示。

(3) 模板(Template),即業務邏輯層 存取模型及調取恰當模板的相關邏輯。模型與模板的橋梁。

Django的架構?

讓我們一覽 Django 全貌:

urls.py 網址入口,關聯到對應的views.py中的一個函數(或者generic類),訪問網址就對應一個函數。

views.py 處理用戶發出的請求,從urls.py中對應過來, 通過渲染templates中的網頁可以將顯示內容,比如登陸後的用戶名,用戶請求的數據,輸出到網頁。

models.py 與數據庫操作相關,存入或讀取數據時用到這個,當然用不到數據庫的時候 你可以不使用。

forms.py 表單,用戶在瀏覽器上輸入數據提交,對數據的驗證工作以及輸入框的生成等工作,當然你也可以不使用。

templates 文件夾 views.py 中的函數渲染templates中的Html模板,得到動態內容的網頁,當然可以用緩存來提高速度。

admin.py 後台,可以用很少量的代碼就擁有一個強大的後台。

settings.py Django 的設置,配置文件,比如 DEBUG 的開關,靜態文件的位置等。

上麵的py文件不理解也沒有關係,後麵會詳細介紹。一圖勝千言,架構全貌工作機製如下所示:

 

Django大家都在使用的商業網站

Sohu 郵箱  、果殼網  、 豆瓣  、 愛調研 、 易度在線雲辦公 、 優容網  、 快玩遊戲、九九房、貸幫網 、 趣奇網 、知乎、時尚時空 、遊嘻板: YxPad webpy、DNSPod 國際版 、下廚房  、 貝太廚房 、 Wopus問答 、 咕咚網 、扇貝網 、站長工具、易度文檔管理係統、個人租房、 在線文檔查看-易度雲查看 、 FIFA310 足球數據分析專家、 搜狐隨身看等等。

2 Django配置準備


 前置條件:pip、python、sublime、anaconda環境已經安裝。

後置條件:

pip install django

檢查是否安裝成功:

 

xxx數據統計分析(決策)平台

係統環境:WIN10 64bit
開發環境:sublime+Anaconda
數據庫:Mysql 5.6.17
語言:python3.5
框架:django1.11+Bootstrap
可視化工具:Highchart|Echarts|plotly|Bokeh(采用Echarts)

3 Django基礎配置安裝


 1 創建項目,項目決策分析:xmjc_analysis

在E盤根目錄下創建xmjc_analysis:

django-admin startproject xmjc_analysis

效果:

settings.py 項目的設置文件
urls.py 總的urls配置文件
wsgi.py 部署服務器文件
__init__.py python包的目錄結構必須的,與調用有關。

2 創建App名為analysis

django-admin startapp analysis

效果:

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

4 視圖和網址創建第一個頁麵

(1)我們在analysis這個目錄中,把views.py打開,修改其中的源代碼:

'''
第一個頁麵
author:白寧超
site:https://www.cnblogs.com/baiboy/
'''
#coding:utf-8
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
    return HttpResponse(u"歡迎進入第一個Django頁麵!")

第一行是聲明編碼為utf-8, 因為我們在代碼中用到了中文,如果不聲明就報錯.

第二行引入HttpResponse,它是用來向網頁返回內容的,就像Python中的 print 一樣,隻不過 HttpResponse 是把內容顯示到網頁上。

我們定義了一個index()函數,第一個參數必須是 request,與網頁發來的請求有關,request 變量裏麵包含get或post的內容。

(2)我們打開 xmjc_analysis/xmjc_analysis/urls.py 這個文件, 修改其中的代碼:

from django.conf.urls import url
from django.contrib import admin

from analysis import views as analysis_views

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

    url(r'^index/$', analysis_views.index,name='index'),# 首頁
]

(3)本地運行服務器測試

注意在項目根目錄xmjc_analysis運行結果如下:

(4)頁麵傳參數,顯示歡迎‘admin’字樣

修改view.py源碼:

通過get方式接受頁麵參數,當然也可以采用post,結合form實現。效果如下

5 配置簡單數據庫操作,默認sqlite,咱們指定mysql數據庫

(1)在xmjc_analysis/settings.py文件下修改如下:

'''
配置Mysql數據庫
2017年7月26日16:40:38
白寧超
'''
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test123',
        'HOST':'localhost',
        'PORT':'3306',
    },
}

xmjc_analysis/__init__.py下修改:

import pymysql
pymysql.install_as_MySQLdb()

(2)在analysis/models.py下設計數據庫表,采用ORM方式

from django.db import models

# Create your models here.
class User(models.Model):
    username = models.CharField('用戶名', max_length=30)
    userpass = models.CharField('密碼',max_length=30)
    useremail = models.EmailField('郵箱',max_length=30)
    usertype = models.CharField('用戶類型',max_length=30)

    def __str__(self):
        return self.username

(3) 在analysis/admin.py中定義顯示數據

from django.contrib import admin
from .models import User

class UserAdmin(admin.ModelAdmin):
    list_display = ('username','userpass','useremail') # 自定義顯示字段

admin.site.register(User,UserAdmin)

(4)創建更改的文件,將生成的py文件應用到數據庫

python manage.py makemigrations
python manage.py migrate

(5)創建超級管理員:用戶名,test;密碼密碼:test123456

python manage.py createsuperuser

(6)登錄後台查看信息

運行服務器:python manage.py runserver

 

可以看到後台信息,並對數據表進行增刪改查操作,但是後台全部英文,可以改為中文顯示?

後台管理設置為中文顯示,xmjc_analysis/settings.py下修改代碼:

LANGUAGE_CODE = 'zh-Hans' # 中文顯示

再去查看:

(7) Django 提供的 QuerySet API,shell玩轉MySql

在xmjc_analysis下輸入【 python manage.py shell】,然後查詢數據表。

創建一條用戶信息:

User.objects.create(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超級管理員")

後台查看:

其他操作方式:

# 方法 1
User.objects.create(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超級管理員")
# 方法 2
twz =User(username="李白", userpass="libai123",useremail="libai@163.com",usertype="超級管理員")
twz.save()
# 獲取對象:
Person.objects.all()
# 滿足條件查詢
User.objects.filter(username="李白")
# 迭代查詢:
es = Entry.objects.all()
for e in es:
    print(e.headline)
# 查詢排序:
User.objects.all().order_by('username')
# 鏈式查詢:
User.objects.filter(name__contains="WeizhongTu").filter(email="tuweizhong@163.com")
# 去重查詢:
qs = qs.distinct()
# 刪除操作:
User.objects.all().delete()
# 更新操作:
Person.objects.filter(name__contains="abc").update(name='xxx')
數據的導出:
python manage.py dumpdata [appname] > appname_data.json
python manage.py dumpdata blog > blog_dump.json
導出用戶數據
python manage.py dumpdata auth > auth.json # 導出用戶數據

(8)批量向數據表導入數據

將name.txt導入數據庫:

數據導入源碼:

#!/usr/bin/env python
#coding:utf-8
#


from django.core import serializers
import json
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xmjc_analysis.settings")


'''
Django 版本大於等於1.7的時候,需要加上下麵兩句
import django
django.setup()
否則會拋出錯誤 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
'''

import django
import json
if django.VERSION >= (1, 7):#自動判斷版本
    django.setup()


def main():
    from analysis.models import User
    f = open('./readme/files/name.txt',encoding='utf-8')
    for line in f:
        name,pwd,email,type = line.split('|')
        User.objects.create(username=name,userpass=pwd,useremail=email,usertype=type)
    f.close()

def jsondb():
    from analysis.models import User
    data = eval(serializers.serialize("json", User.objects.all())) # json
    userdata = json.dumps(data)
    print(type(userdata))


if __name__ == "__main__":
    main()
    # jsondb()
    print('插入完畢!')

查看結果:

 

最後更新:2017-08-30 15:03:22

  上一篇:go  號稱最為簡明實用的Django上手教程(下)
  下一篇:go  王新棟 | Hystrix技術解析