天天看點

Python Web架構 Django項目搭建與測試詳解Django項目搭建

Django項目搭建

0. 項目準備:

python:(目前更新到3.9了),下載下傳位址:

點此下載下傳python

https://www.python.org/downloads/

python解釋器:

點此下載下傳pycharm 一般下載下傳Community版。

https://www.jetbrains.com/pycharm/download/#section=windows

pycharm永久激活暫時不展示,随後更新激活方法。

安裝mysql并設定環境變量

mysql官網下載下傳mysql安裝包并安裝到本地,右擊電腦屬性 → 進階 → 環境變量 → 建立,如下圖所示:

Python Web架構 Django項目搭建與測試詳解Django項目搭建

1. 建立一個檔案夾,用于存放Django項目

進入pycharm後點選建立項目

Python Web架構 Django項目搭建與測試詳解Django項目搭建

加載完成後進入項目頁

2. 建立Django項目

1. 建立項目

打開 pycharm 中的 terminal,确定目前目錄是在項目存放的目錄下,輸入:

django-admin.py startproject coconut
           

coconut 為項目名,自己定義。

2. 項目目錄介紹

  • init.py:項目初始化檔案,會把這個項目目錄變成一個Python的包(package)——相關Python子產品的一個集合。
  • settings.py:項目設定檔案,包含了項目的預設設定。包括資料庫資訊、調試标志以及其他一些重要的變量,項目裡安裝的任何應用都可以通路這個檔案。
  • urls.py:項目總路由配置檔案,在Django裡叫URLconf,它是一個将URL模式映射到你應用程式上的配置檔案。URLconf是Django裡非常強大的一個特性。
  • wsgi.py:項目部署配置檔案
  • manage.py:啟動檔案,是一個同這個Django項目一起工作的工具。可以從它在目錄清單中的權限裡看到它是可以執行的。

3. 啟動項目

在terminal中cd到項目路徑下,執行:

python manage.py runserver
           

預設端口 8000,可指定也可不指定,假設指定端口8888,則執行:

python manage.py runserver ip:port

會出現以下結果:

(venv) F:\python\pythonProject\coconut>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
                                                                                                                                                  November 23, 2020
 - 17:13:01
Django version 2.2.6, using settings 'coconut.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
           

此時點選輸出台上的:

http://127.0.0.1:8000/

會自動跳轉到浏覽器顯示Django項目啟動成功的頁面:

The install worked successfully! Congratulations!

表示Django項目啟動成功!

退出項目快捷鍵:Ctrl+c

4. 建立blog應用

有了項目之後就可以在它下面建立應用了,Django的說法是“app”。

在項目路徑下,執行:

python manage.py startapp users
           

users為應用名,自己定義。

應用目錄介紹:

migrations:資料庫遷移的記錄檔案
__init__.py:應用初始化檔案
admin.py:使用Django自帶背景模闆時注冊管理檔案
apps:注明子應用名,建立子應用已自動标注,可忽略
models.py:建立模型類檔案
tests.py:用于自測
views.py:編寫視圖函數檔案
           

5. 注冊應用

settings.py 中找到 INSTALLED_APPS,在後邊添加建立的子應用名:

# my apps
'users',
           

後續在建立完model模型後,執行syncdb指令時,Django會查找INSTALLED_APPS裡的每一個models.py檔案,并為找到的每一個model都建立一張資料庫表。

INSTALLED_APPS裡的其他預設條目也都擁有model。manage.py syncdb的輸出就确認了這一點,Django會為每一個app都建立了一個或多個表。

每次往項目裡添加新應用時都運作一下資料遷移(sync同步)指令,確定它所需的表已經在資料庫裡建立了。

* Blog的公共部分

從Django的角度來說,一個頁面具有三個典型的元件:

  • 一個模版(template),模版負責将傳遞進來的資訊顯示出來(用一種類似Python字典的對象Context)。
  • 一個視圖(view)函數,它負責擷取要顯示的資訊,通常都是從資料庫取得。
  • 一個URL模式,它用來把收到的請求和你的視圖函數比對,有時也會向視圖傳遞一些參數。

6. 配置模闆檔案

在應用目錄下建立templates檔案夾

注意:大型項目需要在項目根目錄下統一建立末班檔案夾,在settings 中找到 TEMPLATES :

'DIRS': [os.path.join(BASE_DIR, 'templates')],

我們此處隻在建立的應用下建立模闆檔案夾,settings中的TEMPLATES無需設定路徑。

前端HTML頁面需要的js和css也在應用目錄下建立static檔案夾,然後把從網上下載下傳的js和css檔案儲存到static檔案夾中,以供前端HTML頁面調用。

7. 配置資料庫

1. 資料庫設定:

Django預設使用的資料庫是db.sqlite3,我們最常用的是mysql,找到 settings 中的 DATABASES,做以下配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'coconut',  # 資料庫名字
        'USER': 'root',	 # 使用者名
        'PASSWORD': '12345678',  # 資料庫密碼
        'HOST': 'localhost',  # 主機名
        'PORT': '3306'  # mysql端口
    }
}
           

2. 建立資料庫

打開電腦終端,進入mysql:

mysql -u root -p

輸入密碼,然後建立資料庫,編碼格式指定為utf-8

CREATE DATABASE coconut default charset utf8 COLLATE utf8_general_ci;

此處的coconut名需要跟你在settings中的NAME相同。

8. 設定路由

1. 設定總路由

根目錄下找到uls.py檔案,導入include函數,并在urlpatterns的清單中配置應用url:

from django.urls import path, include
urlpatterns = [
    path('', include('users.urls')),
    # path('', include(('users.urls', 'users'), namespace='users')),
]
           

Django1版本是url開頭,Django2版本後是path開頭,配置曬稍有不同,下邊注釋掉的是給users應用指定了命名空間namespace,為了區分不同應用下相同路由比對模闆。

2. 設定子路由

在users應用下建立urls.py檔案,并在此檔案中設定users應用下的路由。當然也可以把所有路由比對到根目錄下的路由中,但是比較混亂,分開建立比較清晰。

from django.conf.urls import url
from users import views
# 此處可以 from . import views,但不建議
urlpatterns = [
	# 首頁
    url(r'^$', views.index),  # $ 要加,否則出現路由屏蔽現象,後面的路由無法比對
]
           

9. 編寫視圖函數

打開views.py檔案,編寫:

from django.shortcuts import render

# Create your views here.


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

有傳回内容的視圖函數:

from django.template import loader, Context
from django.http import HttpResponse
from users.models import Users


def index(request):
	""" 首頁 """
	posts = Users.objects.all()
	t = loader.get_template{"index.html"}
	c = Context({ 'posts' : posts})
	return HttpResponse(t.render(c))
           

10. 建立模闆檔案

在之前建立的templates檔案夾下建立index.html檔案,編寫首頁内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Coconut</title>
</head>
<body>
<h2>歡迎來到椰子首頁!</h2>
</body>
</html>
           

11. 測試效果

打開terminal,在項目根目錄下執行:

python manage.py runserver
           

然後點選連接配接,會跳轉到浏覽器出現:

Python Web架構 Django項目搭建與測試詳解Django項目搭建

這樣,Django項目就算建立完成啦!

12. 建立模型,與mysql互動

打開users應用中的models.py檔案建立模型類

from django.db import models

# Create your models here.


class Users(models.Model):
    """ 使用者模型 """
    id = models.AutoField(primary_key=True, verbose_name='使用者編号')  # 此行可不寫,Django自動建立,并設定成該表的主鍵primary_key
    username = models.CharField(max_length=64, verbose_name='使用者名')
    mobile = models.CharField(max_length=11, verbose_name='手機号')
    email = models.EmailField(max_length=128, verbose_name='郵箱')
    register_date = models.DateField(auto_now_add=True, verbose_name='注冊日期')

    class Meta:
        db_table = 'users'
        verbose_name = '使用者表'
        verbose_name_plural = verbose_name
        ordering = ['-register_date']

    def __str__(self):
        return self.username
           

這個建立的User類是django.db.models.Model的一個子類,這是Django為資料model準備的标準基類,它是Django強大的對象關系映射(ORM)系統的核心。此外,每一個變量都和普通的類屬性一樣被定義為一個特定變量類(field class)的執行個體。

建立好後在terminal中初始化本地資料庫:

(venv) F:\python\test_project\Coconut>python manage.py makemigrations users
           

會傳回建立表users:

Migrations for 'users':
  users\migrations\0001_initial.py
    - Create model Users
           

然後進行資料庫遷移:

(venv) F:\python\test_project\Coconut>python manage.py makemigrate
           

等待遷移完成

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, users
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 admin.0003_logentry_add_action_flag_choices... 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 auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK
  Applying users.0001_initial... OK
           

然後migrations檔案夾中會多出0001_initial.py檔案,這是記錄建立表和遷移。

此時就可以在前端頁面開展類似使用者注冊、登入等相關功能,後期自己根據需求,慢慢擴充項目就可以啦。

13. 總結

Django優雅、簡潔的特性:

  • 内置的Web伺服器能讓開發工作自給自足,同時它能在代碼被修改時自動重新加載你的代碼;
  • 資料模型的建立采用純Python方式完成,自己不用編寫維護任何SQL代碼或XML描述檔案;
  • 自動化的admin應用程式,提供了完整的内容編輯特性,甚至非技術背景的使用者也能使用;
  • 模版系統,可以用來生成html、CSS、javascript以及任何文本輸出格式;
  • 模版過濾器,可以在不解除應用程式商業邏輯的前提下修改表示層的資料顯示(比如日期);
  • URLconf系統,在給予我們URL設計極大靈活性的同時還能将應用程式特定的URL部分保留在其所屬的應用程式内部。

如有不足,歡迎指正!