Django 從入門到實踐系列 之一:入門篇

Django 是 Python web 的一個重量級框架,它提供了路由、模板引擎、數據庫ORM、使用視圖封裝了對 HTTP 請求和響應的處理等功能,甚至還能夠自動生成管理員界面,這些只需簡單的配置,編寫少許的代碼,能夠說是開箱即用。與 Node 中的 web 框架 Express(嚴格的說是一個庫) 不一樣的是,Django 將這些功能都集成在一塊兒,不須要在開發中額外安裝須要用到的包,是相對「全能型」,而 Express 屬於輕量級的 web 框架,將不少庫(如 body-parser)都抽離出去造成單獨的包。這兩種作法各有優勢,前端框架中的 Vue 與 React,也是分別用了這兩種作法。這篇文章是在我學習完 Django 並使用 Django 完成一個小小的博客網站後計劃編寫的 Django從入門到實踐系列 的第一篇文章,主要是對 Django 的知識體系一個大概的綜述,我會先給出怎樣開始一個 Django 項目的簡單教程。須要說明的是,在這以前至少應該熟悉一下 Python 的基本語法。css

1. 先來看怎麼開始一個 Django 項目吧

若是你使用的是 Pycharm 這個編輯器,那麼你可使用它來安裝和初始化一個 Django 項目,在這裏我用的是 VScode,畢竟學習 Django 纔是重點,熟悉一個新的編輯器也須要時間。html

step1: 安裝 Python。前往 pyuthon 官網下載頁面 下載安裝 Python3.7.4。前端

注意 Mac 環境因爲原本就有 Python2 ,因此須要升級 python 到最新的 3.7, 可是不能使用 Python3 直接覆蓋原來的 Python2 ,由於有可能 Mac 系統一些功能會依賴 Python2,因此個人作法是下載 Python3 ,安裝事後使用 Python3 命令時使用 python3 代替 python,使用 pip 下載 Python 包時使用 pip3.7 代替 pip.python

step2: 下載 Django:pip3.7 install Djangomysql

查看 Django 版本檢查下載好沒有:python3 -m django --versionios

step3: 初始化 Django 工程項目:django-admin startproject [project-name]web

注意,初始化項目時,注意項目名稱不能含有連字符 - 符號,下面是執行 django-admin startproject blog_site 以後的工程目錄:sql

上面的各個文件,__init__.py:一個空文件,告訴 Python 這個目錄應該被認爲是一個 Python 包。 settings.py:Django 項目的配置文件。 urls.py:Django 項目的 URL 聲明,就像網站的「目錄」。 wsgi.py:做爲你的項目的運行在 WSGI 兼容的Web服務器上的入口。這些概念具體會在以後的 Django 知識體系中會有深刻介紹。數據庫

step4: 如今能夠運行一個基本的 Django 網站了,只需python3 manage.py runserver便可,使用 Django 提供的默認網站 URL 127.0.0.1:8000/,打開瀏覽器便可看到 Django 網站的首頁。django

step5: 在 Django 網站中增長一個應用: python3 manage.py startapp [應用名稱],並在 Django 工程的配置文件 settings.py 的 INSTALLED_APPS 增長應用(這是爲了讓 Django 識別出所建立的應用)

如建立一個應用 account:python3 manage.py startapp account,表示網站的用戶帳戶,這樣Django 工程的目錄:

settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'account.apps.AccountConfig'
]
複製代碼

能夠看到,生成的應用 account 下的目錄:分爲admin、apps、models、tests、views,還有__init__、migratios。 主要看 admin、apps、models、tests、views,其中 views 是用於處理應用業務邏輯、展現頁面的視圖,models 是定義數據模型,admin 用來編寫管理員界面,此外還能夠添加 urls ,用於配置路由,migratios 文件夾中每次在修改數據模型並激活數據模型是會增量生成一個遷移文件,用來記錄每次修改的歷史。Django 工程下分爲若干個應用,好比用戶帳戶、博客等, 每個應用都會有這些文件,每一個應用都有屬於本身的數據庫模型、路由、視圖。

step6: 爲應用編寫數據庫模型,在應用的 modles.py 下編寫:

from django.db import models

# Create your models here.

class Account(models.Model):
  acount_name = models.CharField(verbose_name='帳戶名',max_length=10)
  password = models.CharField(verbose_name='密碼',max_length=30)
  
   def __str__(self):
    return self.acount_name
複製代碼

step7: 激活模型:python3 manage.py makemigrations [應用的名字]

好比:python3 manage.py makemigrations account,因而在 account 應用的 migrations 目錄下生成本次數據模型的遷移文件 001_initial.py

step8: 把模型的更改同步到數據庫:python3 manage.py migrate,這樣就給把全部在 setting.py 的 INSTALLED_APPS 中指定的應用的數據模型都同步到了 Django 的數據庫

Django 默認使用 SQlite 做爲後臺數據庫引擎,能夠自定義數據庫(好比mysql),作法是在 settiongs.py 的 DATABASE 選項中指定。

DATABASES = {
	    'default': {
	        'ENGINE''django.db.backends.myspl',
	        'NAME''數據庫名',
	        'USER':'數據庫用戶名',
	        'PASSWORD':'數據庫用戶密碼',
	        'HOST':'數據庫所在主機',
	        'PORT':'數據庫端口號'
	    }
	}
複製代碼

還能夠配置多數據庫集羣,參加官網 多數據庫

step9: 建立後臺管理頁面:運行python3 manage.py createsuperuser 建立超級管理員, 會要求輸入管理員名字和密碼。任何訪問 127.0.0.1:8000/admin/便可看到管理員的界面。

爲了讓管理員能夠看到每一個應用的數據狀態,須要在每個應用的 admin.py 中註冊該應用的模型:

from django.contrib import admin

# Register your models here.
from .models import Account 

admin.site.register(Account)
複製代碼

管理員界面是能夠自定義的,自定義後臺表單

step10: 編寫視圖和模板:views.py 中編寫視圖方法用來響應 HTTP 請求和發送 HTTP 響應,固然首先請求會通過 urls.py 路由到對應的視圖方法:

blog_site/urls.py:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('account/',include('account.urls'),name='account')
]

複製代碼

account/urls.py:

from django.urls import path
from . import views

app_name='account'
urlpatterns = [
    path('register/', views.register,name='register'),
]
複製代碼

account/views.py:

from django.shortcuts import render
from .models import Account
# Create your views here.

def register(request):
    ''' 註冊用戶 '''
  if request.method == 'GET':
    return render(request,'register.html')
  elif request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']
    a = Account(
      username=username,
      password=password
    )
    a.save()
    return render(request, 'register-result.html')

複製代碼

account/templates/register.html:

<!DOCTYPE>
<html>
  <head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width"/>
    <title>
    註冊
    </title>
  </head>
  <body>
    <form action="{% url 'account:register' %}" method="post">
      <input name='username' type='text'/>
      <input name='password' type='text'/>
      <input type='submit' value='提交註冊'/>
    </form>
  </body>
</html>
複製代碼

Django 會在在每個應用的 templates 目錄尋找視圖中用到的模板,這是由於在 settings.py 中設置了 TEMPLATES 選項 APP_DIRS 爲 True。因此這裏咱們在 account 的目錄下建立了 templstes 目錄,並在其中編寫模板。

因而咱們如今只要訪問127.0.0.1:8000/account/register便可看到視圖返回的註冊頁面。

step11: 處理靜態文件。在 Django 中,js、css、圖片等都是 靜態文件。 好比給模板添加css樣式: 首先咱們須要在應用目錄下建立 static 目錄,用來放該應用的靜態文件:

accounts/static/css/index.css:

	li{
	  color: red
	}
	
accounts/templates.index.html:

	{% load static %}
	<link rel="stylesheet" type="text/css" href="{% static 'css/index.css' %}"/>
	<h2>用戶列表</h2>
	{% if users %}
	<ul>
	{% for user in users %}
	  <li>{{user.username}}</li>
	{% endfor %}
	</ul>
	{% endif %}
複製代碼

{% load static %}是用於生成靜態文件的絕對路徑的,{% static 'css/index.css' %} 將被替換爲/static/css/index.css

在 settings.py 的 STATIC_URL選項能夠設置爲/static/(其實建立Django工程是就已經默認設置好了),這樣能夠在每個應用裏建立 statis 目錄,在此目錄下放置靜態文件便可,Django 會優先在每個應用的 static 目錄裏搜尋靜態資源。若是工程包含未與任何應用綁定的靜態資源。除了在 apps 中使用 static/ 目錄,你能夠在配置文件中定義一個目錄列表 (STATICFILES_DIRS) ,Django 會從中尋找靜態文件。例子:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
]
複製代碼

來看 Django 的知識體系:

Django 由如下幾個模塊組成:

1)配置信息:在settings.py 文件中,配置網站的路由、數據庫、模板文件、時區、國際化等待。

2)路由系統:路由系統對用戶請求的分發。經過 Django 的 URLconf 模塊,每個應用的 urls.py 就是一個 URLconf。

3)模型:數據庫的映射,經過 ORM 技術可使用純粹的 Python 語法來定義數據庫模型(固然必要時也可使用 SQL 腳本)。

4)模板:Django應用程序表現層,可使用模板的內置標籤和過濾器(也能夠自定義)。

5)視圖:鏈接模版和模型,接受路由分發過來的請求並處理 request,最後調用適當的模板來響應 response 。

6)表單系統:客戶端與服務端交流的一個重要工具,Django提供了一個強大的表單系統能夠簡單的建立、處理表單。

7)admin管理模塊:Django提供 admin 模塊能夠稱做一個 CMS 系統了,經過豐富的接口在編寫不多代碼的狀況下迅速搭建起一個包含信息發佈、權限管理等功能的應用系統。
複製代碼

Django 使用 MTV 模式來組織網站,這是一種與 MVC 模式相似的 web 設計模式。

M(model):負責業務對象與數據庫的關係映射(ORM),與 MVC 的 M 同樣;
T (template):負責如何把頁面展現給用戶(html),這部分相似於 MVC 中的視圖;
V(view):負責業務邏輯,並在適當時候調用 Model 和 Tempalte ,這裏就不是 MVC 中的 V 了,反而更像 Control。
複製代碼
相關文章
相關標籤/搜索