Python 中的 web 常見框架(Django 專案1)

weixin_34239169發表於2018-03-02
  • 大包大攬 Django
  • 力求精簡 web.py 和 Tornabo
  • 新生代微框架 Flask 和 Bottle

微框架

優勢:

  • 聚焦業務邏輯
  • 學習成本低
  • 靈活性和伸縮性較強

劣勢:

  • 很多邏輯需要手動編寫
  • 安裝大量模組後體積較大

Flask

保持核心簡單,易擴充套件。
不包括資料庫抽象層,表單驗證等。 可通過新增擴充套件的方式新增功能

安裝

pip install flask

通過匯入 flask 模組,來驗證安裝是否成功。

表單開發

表單標籤

用於宣告表單範圍,位於表單標籤中的元素將被提交
語法: `<form></form>
屬性: method, Enctype, action

表單域

表單域包含文字框,密碼框等多種型別
語法: <input.../>
屬性: type,name,value

表單域種類

文字框: <...type:text>
密碼框:<...type:password>
文字區域:<...type:textarea>
檔案上傳框:<...type:file>
單選框:<...type:radio>
核取方塊:<...type:checkbox>


核取方塊的值為陣列形式。

表單按鈕

提交按鈕
復位按鈕
一般按鈕

表單提交方式

GET
POST 資料放置在 HTML Header 中提交。

GET 可以被瀏覽器快取
資料暴露 URL
適合:單純請求資料,不進行其他操作
表單資料較短,不超過 1024 字元
對安全性要求一般

POST URL 可以被快取,資料不被快取
請求不便分享,沒有長度限制
適合:不僅僅用於請求,需要將資料插入資料庫內
表單資料過長
傳送的資料不是 ASCII 編碼

Djongo

優勢:

  • 詳細的文件
  • 全套結局啊方案
  • 強大的 URL 路由配置
  • 完善的自主管理後臺

劣勢:

  • 緊耦合
  • 自帶 ORM 不夠強大
  • Template 較弱
    [圖片上傳失敗...(image-54d6bb-1519953931235)]

MTV 模型工作模型:

<img src="https://lh3.googleusercontent.com/-GaKxySImq-0/WoJQLmpzNOI/AAAAAAAAAGg/YpuMPv-m1O4SsBXzWqEgJGv5LpM6UK9JwCHMYCw/I/15184896385708.png" width = "400" alt="MySQL"/>

建立虛擬環境 virtualenv

如果你生產或開發環境需同時支援 Python 2 和 Python 3 ,那就需要 virtualenv。我們是從零開始學習 Django,所以可以直接使用 venv。簡單來說,venv 模組是 Python 3.3 版本之後,標準庫自帶的虛擬環境建立和管理工具,在 Python 3 版本是代替 virtualenv。

使用 venv 在當前系統中建立出一個環境,該環境可以跟當前系統互不影響,你可以隨意折騰。出現問題,只要刪除即可,不會影響到當前系統。另外,有了 virtualenv 虛擬環境之後,我們就可以把那個資料夾整體拷貝了,部署起來方便很多。

步驟:

一. 建立專案目錄
建立專案主目錄。並進入主目錄,建立專案目錄

mkdir DjangoWeb
cd DjangoWeb
mkdir DjangoWebFirst

二. 建立虛擬環境,啟用虛擬環境
--no-site-packages 表示不安裝系統中的第三庫
建立虛擬環境。

virtualenv --no-site-packages env_python

三. 使用 pycharm 建立專案
[圖片上傳失敗...(image-ce1d91-1519953931235)]

在 location 填入專案目錄所在路徑
在 Interpreter 填入新建的虛擬環境
在 Application 填入第一個網站的名字

建立好後,目錄類似這樣:
[圖片上傳失敗...(image-53318b-1519953931236)]

建立資料庫

python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying sessions.0001_initial... OK
(env_python) fuyiweng@fuyiwengdeMacBook-Pro:~/Documents/study/NiuCodeLesson/DjangoWeb/DjangoWebFirst% python3 manage.py makemigrations
Migrations for 'django_demo':
  django_demo/migrations/0001_initial.py
    - Create model People

新建資料庫:
在 models.py 中新建一個 People 類,
在終端執行:python3 manage.py makemigrations
建立建表策略

執行表合併:

NiuCodeLesson/DjangoWeb/DjangoWebFirst% python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, django_demo, sessions
Running migrations:
  Applying django_demo.0001_initial... OK

在 views 中建立頁面:
在 views 檔案中,新建 first_try 類:

from django.shortcuts import render
from django.http import HttpRequest, HttpResponse
from django_demo.models import People
from django.template import Context, Template


# Create your views here.
def first_try(request):
    person = People(name='jack', job='officer')
    html_string = '''
        <html>
            <head>
                <meta charset="utf-8">
                <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.6/semantic.css" media="screen" title="no title">
                <title>diango</title>
            </head>
            <body>
                <h1 class="ui center aligned icon header">
                    <i class="hand spock icon"></i>
                    Hello, {{ person.name }}
                </h1>
            </body>
        </html>
    '''
    # 將 html 字元轉成模板
    t = Template(html_string)
    # 組上下文
    c = Context({'person': person})
    # 渲染模板
    web_page = t.render(c)
    return HttpResponse(web_page)

在 urls 中增加 first_try 的 url:

  1. 引入 first_try from django_demo.views import first_try
  2. 增加路徑 urlpatterns 下新增 path(r'first_try/', first_try),

完成。


原始碼地址:
『NiuCodeLesson/DjangoWeb/DjangoWebFirst/』:
https://github.com/wengfe/NiuCodeLesson/tree/master/DjangoWeb/DjangoWebFirst

部落格地址:
『wengfe.win』:http://www.wengfe.win/2018/02/11/2018-02-11/#more

相關文章