1. 程式人生 > >【秒懂】號稱最為簡明實用的Django上手教程

【秒懂】號稱最為簡明實用的Django上手教程

作者:白寧超

2017年8月24日09:37:35

摘要:Django的學習教程也是分門別類,形式不一。或是較為體系的官方文件,或者風格自由的部落格文件,或者偏向例項的解析文件。即使官方文件,章節較多,文字闡述累贅,有時候我們只是關注某個功能用法而已,而自由博文最大的問題是互相抄襲,結構混亂,涵蓋面小且錯誤較為明顯。由此,本文結合學習期間資料梳理和專案開發經驗,整理出一套較為常用實用的文章。適用於(1)新手入門,無論C#,C,java,Python,R等具有任何程式語言基礎均可;(2)想快速瞭解Django並可以快速開發上手者。(3)適用於作為資料查詢,技術點參考。

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:http://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="[email protected]",usertype="超級管理員")

後臺檢視:

其他操作方式:

# 方法 1
User.objects.create(username="李白", userpass="libai123",useremail="[email protected]",usertype="超級管理員")
# 方法 2
twz =User(username="李白", userpass="libai123",useremail="[email protected]",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="[email protected]")
# 去重查詢:
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('插入完畢!')

檢視結果:

>>   至此,基本熟悉上手了。深入學習待續...

相關推薦

號稱最為簡明實用Django上手教程

作者:白寧超 2017年8月24日09:37:35 摘要:Django的學習教程也是分門別類,形式不一。或是較為體系的官方文件,或者風格自由的部落格文件,或者偏向例項的解析文件。即使官方文件,章節較多,文字闡述累贅,有時候我們只是關注某個功能用法而已,而自由博文最大的問題是互相抄襲,結構混亂,涵蓋面小

號稱最為簡明實用Django上手教程(下)

作者:白寧超 2017年8月25日08:51:58 摘要:上文號稱【最為簡明實用的Django上手教程】介紹了django基本概念、配置和相關操作。相信通過上文的閱讀,基本明白django執行機制和操作。假設你現在通過dome和相關書籍已經基本理解django這臺機器的執行。下一步如何像asp.net

Hyperledger Fabric聯盟區塊鏈 Node.js鏈碼開發

Hyperledger Fabric是一種聯盟區塊鏈,Fabric區塊鏈也支援智慧合約,被稱為鏈碼(Chaincode)。Fabric鏈碼就是一個標準的(執行在docker容器中的)作業系統程序,通過gRPC協議與Fabric節點通訊。因此理論上可以使用任何語言開發Fabric鏈碼。目前官方

StructuredStreaming手把手教你寫StructuredStreaming + Kafka程式

這篇部落格我們介紹基於StructuredStreaming進行實時流運算元開發,並將結果輸出到kafka中。       StructuredStreaming使用的資料型別是DataFrame和Dataset。      從Spark 2.0開始,DataFrame和

Java第1章_初識Java01_程式語言

各位小夥伴們好哇!從今日起,我將開始更新[《秒懂Java》](https://www.cnblogs.com/mjios/category/1789484.html)系列文章,從0開始講解Java的方方面面,後面也將推出**配套的視訊版**,歡迎大家保持關注! - 我會盡力辦到:在保證通俗易懂的同時,不丟失知

Java第1章_初識Java04_學習資料

為了學到更多的新知識,我們經常會去網上搜索各種學習資料。或者,在學習、工作過程中遇到了解決不了的問題,我們也會去網上搜索答案(比如百度、谷歌一下)。這篇文章,主要想跟大家聊聊關於學習資料的選擇。 ## 建議 ### 山寨 在日常生活中,有時稍有不慎,我們可能會買到一些讓人哭笑不得的山寨商品,比如 - 藍

音視訊開發02_Windows開發環境搭建

## 音視訊開發庫的選擇 每個主流平臺基本都有自己的音視訊開發庫(API),用以處理音視訊資料,比如: - iOS:AVFoundation、AudioUnit等 - Android:MediaPlayer、MediaCodec等 - Windows:DirectShow等 - ... 為了讓所有平臺的開發

音視訊開發05_Qt開發基礎

## 控制元件的基本使用 為了更好地學習Qt控制元件的使用,建議建立專案時先不要生成ui檔案。 ![不生成ui檔案](https://img2020.cnblogs.com/blog/497279/202103/497279-20210304194032371-721491748.png) 開啟**ma

音視訊開發06_重識聲音

> 關於聲音的知識,記得沒錯的話,是屬於初中物理的內容。為了學好音視訊,我們有必要重新溫習一下聲音的相關知識。需要提醒的是:**本文的GIF動態圖比較多,建議選擇在網路較好的環境中閱讀**。 ## 產生 聲音(Sound),是由物體的振動產生的。一切正在發聲的物體都在振動。 - 我們說話的時候,是聲帶在

音視訊開發09_音訊錄製02_程式設計

## 通過程式設計錄音 開發錄音功能的主要步驟是: - 註冊裝置 - 獲取輸入格式物件 - 開啟裝置 - 採集資料 - 釋放資源 ![主要步驟](https://img2020.cnblogs.com/blog/497279/202103/497279-20210319195750551-11095347

音視訊開發12_播放WAV

對於WAV檔案來說,可以直接使用*ffplay*命令播放,而且不用像PCM那樣增加額外的引數。因為WAV的檔案頭中已經包含了相關的音訊引數資訊。 ```shell ffplay in.wav ``` 接下來演示一下如何使用SDL播放WAV檔案。 ## 初始化子系統 ```cpp // 初始化Audio

號稱簡明實用Django上手教程

1 幾個基本概念   前置條件:假設讀者基本Python語言基礎,或者具備某種程式語言的基礎。你還熟悉web開發環境,懂些css,js,db等。 Django是什麼? Django是一個開放原始碼的Web應用框架,由Python寫成。採用了MVC的軟體設計模式,即模型M,檢視V和控制器C。它最初是被

技術文章 | 號稱簡明實用Django上手教程

本文來源於阿里雲-雲棲社群,原文點選這裡。  前置條件:假設讀者基本Python語言基礎,或者具備某種程式語言的基礎。你還熟悉web開發環境,懂些css,js,db等。 Django是一個開放原始碼的Web應用框架,由Python寫成。採用了MVC的軟體設計模

資源下載分享個嵌入式開發的入門教程(包含視頻)

gpt water term href jsb sdn ast csdn gravity 基於ARM A17的嵌入式開發的入門開發教程,有興趣的朋友可下載或者在線觀看 開發教程:http://wiki.t-firefly.com 視頻教程:https://pan.baid

學習總結Git學習-參考廖雪峰老師教程

公元2018-10-21 實驗室桌上型電腦 win7 64位 參考教程: 廖雪峰Git教程 目錄: 一、Git簡介 二、安裝Git 三、建立版本庫 四、時光機穿梭 五、遠端倉庫 六、分支管理 七、標籤管理 八、使用GitHub 九、使用碼雲 十、自定義Git 期末總結 此處留坑:

分散式架構分散式訊息中介軟體MQ開發教程

關於分散式訊息中介軟體MQ的詳細介紹: 【分散式架構】分散式訊息中介軟體MQ開發教程 (阿里雲訊息佇列MQ(Message Queue)是企業級網際網路架構的核心產品,服務於整個阿里巴巴集團已超過8年,經過阿里巴巴交易核心鏈路反覆打磨與歷年雙十一嚴苛考驗,是一個真正具備低延遲、高併發、高可用

備忘Java高併發程式設計實戰視訊教程

課程簡介:隨著多核時代的興起,現在的伺服器CPU可能多達10個以上的核心。對於併發程式設計的市場需求量激增,那麼如何才能將多核CPU的效能發揮到極致呢?而Java作為服務端程式設計使用最廣泛的語言,必然需要和多核CPU打交道。那Java為我們提供了哪些併發程式設計的工具呢?

備忘elk日誌分析視訊 ELKStack視訊教程以及Solr教程

01.高階架構師日誌平臺之ELKStack實踐    01.elk簡介、ES安裝.flv    02.es叢集.flv    03-logstash快速入門.flv    04-logstash收集系統日誌-file.flv    05-logstash收集java日誌-c

備忘一套不可多得的Lucene視訊教程帶課程原始碼

課程目錄:    01_lucenc簡介和建立索引初步.avi    02_lucene簡介和搜尋初步.avi    03_lucene索引_建立_域選項.avi    04_lucene索引_的刪除和更新.avi    05_lucene索引_加權操作和Luke的簡單演示

深度學習CentOS 7 安裝GPU版Tensorflow教程(一)

之前一直在玩cpu版的tensorflow,這些天突然心血來潮,想搞個gpu版的tensorflow來嚐嚐鮮,沒想到把所有能夠踩的坑幾乎全部踩了一遍,在這裡把自己踩的坑和一些安裝細節拿出來分享給大家,