1.準備工做

開發環境:
python: 3.7.3 下載地址:www.python.org/downloads/
pip: pip3
Django: 2.2 下載地址: www.djangoproject.com/download/
PyCharm: 2017.2 下載地址:www.jetbrains.com/pycharm/dow…html

2.基礎知識

1.Python: Python發源於八十年代後期。開發者是Centrum Wiskunde & Informatica的Guido van Rossum,這是位於荷蘭阿姆斯特丹科學園區的一個數學和計算機科學研究中心。以後Van Rossum一直是Python開發頗有影響的人物。事實上,社區成員給了他一個榮譽稱號:終生仁慈獨裁者(BDFL)。python

2.web框架介紹 web框架的概念就像建房子,地基、支撐柱、大梁的骨架還有其餘沙石、地板等等材料已經有了, 剩下的就是靠你本身組裝起來。猶如積木同樣。 mysql


說明:圖片來源百度。

Django: Python表明性web框架, 遵循MMVC架構模式的開源框架。 它的名字來自Django Reinhardt,一個法國做曲家和吉他演奏家,不少人認爲他是歷史上最偉大的吉他演奏家。位於堪薩斯洲的Lawrence城的Lawrence Journal-World報社有兩位程序員,Adrian Holovaty和Simon Willison,他們在2003的時候開發出了Django,用於給報紙開發web程序。程序員

其餘框架:tornado、flask、webpyweb

3.實例

Python的和Pycharm的安裝忽略,安裝比較簡單。sql

1.安裝

Mac終端下:數據庫

$ pip3 install django # 或 pip3 install django==2.2
複製代碼

Windows是在cmd裏面,命令相同。django

2.建立項目

打開Pycharm,歡迎頁create project,而後
flask

而後點擊create就能夠了。

PS:建立項目也可使用命令這裏不作介紹.

django-admin createproject DjangoQuick
django-admin startapp quick
複製代碼

3.項目結構

4.啓動項目

Pycharm菜單欄


直接點擊運行。或者左下角Terminal輸入
python3 manage.py runserver

將會在瀏覽器看到


這樣表示項目已經啓動成功,可是咱們沒有編寫任何代碼,因此出現了默認的錯誤提示。

5.添加視圖

打開quick目錄下的views.py,輸入一下內容

from django.shortcuts import render
from django.http import HttpResponse # 新添加
# Create your views here.

# 新添加
def index(request):
    return HttpResponse('success')

複製代碼

6.添加url

打開DjangoQuick下的urls.py,修改以下:

from django.contrib import admin
from django.urls import path

from quick.views import index # 導入包

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index) # 添加新的映射關係
]

複製代碼

若是使用Pycharm的按鈕啓動項目,須要點擊stop,從新運行,若是在terminal中運行項目,會自動重啓。
而後刷新瀏覽器。


而後就會看到咱們在views.py的index方法中的輸出。

7.返回Html(模版)

在quick目錄新建templates目錄


而後右鍵-new-html file, 新建一個index.html文件

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
這是一個html from:https://litets.com
</body>
</html>
複製代碼

修改views.py文件

from django.shortcuts import render


def index(request):
    return render(request, 'index.html')

複製代碼

重啓服務器,刷新瀏覽器將會看到

這是一個html from:https://litets.com
複製代碼

8.靜態文件

上面咱們已經成功輸出了一段html代碼,而且成功展現。你們都知html的美化須要依靠css,
css寫法有兩種:內聯式和外聯式。內聯就不用多說,直接寫在html同文件裏面就能夠了,如今咱們使用外聯文件改怎麼辦呢?

在quick目錄下新建static/css/style.css文件。

.desc {
    color: red;
}
複製代碼

而後修改index.html
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>

    <div class="desc">
        這是一個html from:https://litets.com
    </div>

</body>
</html>
複製代碼

刷新瀏覽器,將會看到字變成紅色了。

9.接收用戶數據,處理後返回

修改index.html文件

<div class="desc">
    這是一個html from:https://litets.com
</div>
<!--一下是新添加-->
<form action="/" method="post">
    {% csrf_token %}

    用戶名: <input type="text" name="username" placeholder="請輸入用戶名"> <br>
    密碼: <input type="password" name="password" placeholder="請輸入密碼"> <br>
    <input type="submit" value="提交">
</form>

<!--users來自view中的context-->
{% if users %}
    <table border="1px">
        <tr>
            <td>序號</td>
            <td>用戶名</td>
            <td>密碼</td>
        </tr>

        {% for user in users %}
            <tr>
                <td>{{ forloop.counter }}</td>
                <td>{{ user.username }}</td>
                <td>{{ user.password }}</td>
            </tr>
        {% endfor %}

    </table>
{% endif %}

複製代碼

views.py修改

from django.shortcuts import render


def index(request):
    # 判斷是不是post請求
    if request.method == 'POST':
        # 獲取到請求參數, username的寫法,若是username不存在不會拋異常
        # password 會拋異常
        username = request.POST.get('username')
        password = request.POST['password']

        # 業務 需求:
        users = []
        for x in range(0,3):
            users.append(
                {'username': '%s-%d' % (username, x), 'password': '%s-%d' % (password, x)}
            )

        # 返回給用戶 模版中使用到的users就是這裏傳遞進去的
        return render(request, template_name='index.html', context={
            'users': users
        })
    return render(request, 'index.html')

複製代碼

這樣咱們就實現了一個基本的網站了,可是有一個問題,用戶傳遞過來的數據只是單次有效,沒法持久化。
一般一個網站應用到須要持久化數據,好比文件、數據庫等。

10.數據庫持久化數據

咱們打開DjangoQuick目錄下的setting.py找到DATEBASES
默認項目使用sqlite3最爲數據庫。還支持 MySQL, PostgreSQL等


可用的引擎有:
'django.db.backends.sqlite3'
'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.oracle'
複製代碼

Mysql的設置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test', # 數據庫名稱,
        'HOST': 'localhost', # 主機地址
        'USER': 'user', # 數據庫用戶
        'PASSWORD': 'pwd', # 密碼
        'PORT': 3306 # mysql的端口默認3306
    }
}
複製代碼

這裏咱們使用默認的sqlite3。

打開quick下的models.py

from django.db import models

class User(models.Model):
    
    username = models.CharField(max_length=25)
    password = models.CharField(max_length=18)

複製代碼

咱們增長了兩個字段username和password,Django默認支持orm。
同步數據庫,在終端中執行

$ python3 manage.py makemigrations
複製代碼

此命令執行完成後,會在migrations下生產記錄models變更的記錄。

此時數據庫並未變更,而後執行
$ python3 manage.py migrate
複製代碼

這樣models的變更,當即同步到數據庫中。

修改views.py

from django.shortcuts import render

from .models import User

def index(request):
    # 判斷是不是post請求
    if request.method == 'POST':
        # 獲取到請求參數, username的寫法,若是username不存在不會拋異常
        # password 會拋異常
        username = request.POST.get('username')
        password = request.POST['password']
        
        u = User(username=username, password=password)
        u.save()

    # 業務 需求:查詢出全部數據
    users = User.objects.all()
    
    # 返回給用戶
    return render(request, template_name='index.html', context={
        'users': users
    })

複製代碼

這樣添加用戶後就會持久報錯了,即便關閉瀏覽器,從新訪問數據也是存在的。

咱們查看db.sqlite3文件查看裏面的數據