Django實現迷你淘寶(二) --- Django安裝與簡介

歡迎查看本系列的其他文章:

  1. postgres安裝與入門
  2. django安裝與入門
  3. 使用django內置的驗證系統
  4. 使用django的表單簡化代碼
  5. 使用Bootstrap美化網頁

Django實現迷你淘寶(二) — Django安裝與簡介

一、安裝Django

1.1 安裝python

官網下載最新版的python(至少3.0+),按照提示安裝

1.2 配置Emacs

安裝yapf,一款Google出品的python文件自動格式化工具

pip install yapf

打開Emacs

  1. M+x list-packages列出所有安裝包
  2. install py-yapf,py-yapf會在保存python文件是自動調用yapf調整格式
  3. install elpy,elpy是emacs下一個python開發環境包,提供了語法高亮,自動補全等特性

要是不喜歡用命令行寫代碼,IDE推薦使用PyCharm,學生郵箱還能申請免費使用JetBrain全家桶。

1.3 安裝Django

在利用pip安裝Django之前,爲了保持我們電腦開發環境的整潔(和方便),我們先創建一個新的文件夾,並創立一個新的python3虛擬環境

mkdir testDjango
cd testDjango
python3 -m venv venv

激活虛擬環境(取消的話,deactivate

source venv/bin/activate

輸入python --version查看版本,應該顯示的是python3.0+版本

利用pip安裝Django

pip install django

安裝完成之後,進入python,輸入一下指令

import django
print(django.get_version())

或者直接命令行輸入

django-admin --version

能正常輸出版本號,即Django安裝成功

二、第一個Django項目

這部分會帶領你一步步的建立你的第一個Django項目

2.1 基礎知識

2.1.1 查看版本號

python -m django --version

2.1.2 新建Django項目

django-admin startproject miniTaobao

利用tree指令(沒有的話用brew或者apt安裝一下)查看目錄,會看到如下的結構:

.
├── manage.py
└── miniTaoBao
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
  • 最外層的HelloWorld目錄,只是目錄名字,Django不會識別,你可以任意修改
  • manage.py: 一個命令行工具,讓你與Django進行交互(如啓動server或者新建App)
  • 裏層的HelloWorld目錄是該工程實際的python包名,用於導入裏面的文件(如import miniTaobao.urls
  • miniTaoBao/__init__.py: 一個空文件,用於告訴python這個目錄應被識別爲一個包
  • miniTaoBao/settings.py: 設置/配置Django項目的地方
  • miniTaoBao/urls.py: 該Django項目的URL聲明,可以簡單的理解爲一個該工程支持的所有url的表格

2.1.3 運行項目

首先進入miniTaobao/settings.py文件修改一下配置,找到ALLOWED_HOSTS,添加0.0.0.0
然後運行以下指令

python manage.py runserver 0.0.0.0:8000

或者可以簡寫爲python manage.py runserver 0:8000
這時候你可能會看到這樣的紅色字提醒

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.

暫時不用理解是什麼,單純的按照他說的,運行一下python manage.py migrate,然後重新運行一下。
此時打開瀏覽器,輸入0.0.0.0:8000,你應該可以看到django成功運行的標誌
在這裏插入圖片描述

NOTE:使用0.0.0.0使得其他電腦也可以連接到你的服務器(前提你的電腦公網可見的話),127.0.0.1則只接受本地連接

2.1.4 修改數據庫

django默認生成的是使用sqlite作爲後端數據庫的,這裏我們改用PostgreSQL作爲我們的數據庫。因爲sqlite只能本地訪問,而postgresql是支持通過多臺機器通過網絡連接的,而且開源免費,功能也更加強大(具體配置可看前一篇文章)。
打開miniTaobao/settings.py,找到DATABASES,修改爲如下

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'testDB',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

記得安裝postgres的相關python包(否則可能會看到類似錯誤Error loading psycopg2 module: No module named 'psycopg2'

pip install psycopg2

運行程序,成功運行的話,證明切換數據庫成功

常見問題

  1. Library not loaded: libssl.1.1.dylib
    嘗試安裝psycopg2-binary,這個包會包含一些常用的C庫文件,如libssl
pip install psycopg2-binary

2.2 創建一個App

利用以下指令新建一個App(負責一個特定功能)

python manage.py startapp users

這裏我們新建一個users類,專門負責用戶驗證相關功能,如註冊,登錄

Project和App的區別
App是一個Web應用,它應該支持某個功能(可以幹某些事情),如博客,數據庫等。
Project是針對一個完整網站的一系列配置文件和App的集合。
一個Project可以包含很多個App,而一個App也可以被應用在很多個Project裏面。模塊化思想!!!

此時我們的項目目錄應該變爲

.
├── db.sqlite3
├── manage.py
├── miniTaoBao
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   ├── settings.cpython-37.pyc
│   │   ├── urls.cpython-37.pyc
│   │   └── wsgi.cpython-37.pyc
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── users
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

可以看到,在miniTaobao的同級目錄下多了一個users的文件夾,這裏簡單解釋一下app裏每個文件的作用:

  • __init__.py: 用於聲明該文件夾是一個python package
  • admin.py:用於註冊你的models(模型),對應數據庫裏面的數據
  • apps.py:聲明瞭這個App的一些相關信息(修改setting.py“安裝”該app的時候會用得到)
  • migrations:存放了數據庫的修改歷史(每次makemigrations就會生成一個新的文件,記錄修改)
  • models.py:用於聲明你的models
  • tests.py:用於編寫Unit test
  • views.py:編寫你的視圖函數(每個視圖函數會對應一個url)

注意,此時你只是新建了一個App,但是django還不能識別這個新的App,你還需要“註冊”一下。
打開miniTaobao/setting.py找到INSTALLED_APPS,在最開始添加一行'users.apps.UsersConfig',,這樣django就會識別新建的App了。

2.2.1 編寫第一個視圖

進入users目錄,分別修改view.pyurls.py兩個文件,內容如下

view.py

from django.http import HttpResponse
def home(request):
    return HttpResponse("Hello, world. You're at the user page.")

urls.py(默認沒有,自己新建一個)

from django.urls import path
from . import views
urlpatterns = [
    path('', views.home, name="home"),
]

NOTE:每一個App裏面都有自己的view和url,一般來說兩者是一一對應的,新增一個view,一般就對應一條新的URL

還記得前面說的嗎?miniTaobao/urls.py記錄了整個網站所有的url(當然也包含了這個新App!),所以現在我們需要去那裏“登記”一下我們的url,打開miniTaobao/urls.py文件,修改成以下的樣子(增加了include

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

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

include() 函數使得我們可以“引用”其他的url配置。當Django遇到include()函數時,它會截斷已經匹配到的url並將剩餘部分發送到包含進來的url配置裏面進行進一步的解析。include()函數讓URL更加“插件化”,每一個app都可以有自己的URL匹配規則(如users/urls.py),然後每一個app可以被放置到不同的地方。
現在再次運行我們的程序,並打開瀏覽器輸入0.0.0.0:8000,你就能看到你剛新建的頁面了

在這裏插入圖片描述

2.2.2 創建一個新的model

Django裏面內置了一層ORM(Object-relational mapper)(用於把類映射到sql裏面),所以我們不需要去寫sql語句,只需要創建修改我們需要的類,剩下的事情,就都交給Django。

修改“model”三步走

  1. models.py裏面修改model
  2. python manage.py makemigrations,針對新的更改,生成migrations
  3. python manage.py migrate,應用上一步生成的migrations

牢記每次修改模型後,都需要運行makemigrationsmigrate兩個步驟,這兩個就是告訴Django把我們類的更新,映射到SQL數據庫裏面(生成修改和執行修改)。

打開users/models.py,加入以下內容

from django.contrib.auth.models import User
from django.db import models

# Create your models here.
class Profile(models.Model):
    user = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE)
    is_seller = models.BooleanField(default=False)

    def __str__(self):
        return f'{self.user.username} Profile'

這裏我們聲明瞭一個profile類,你可能會好奇這個profile類裏面並沒有姓名密碼等常見字段,這是因爲django自帶就有一個user類(用於驗證),user類裏面已經幫我們把這些常用字段封裝好了,所以我們聲明一個OneToOneField,表明每個profile對象對應着一個user對象。

  • python manage.py makemigrations
Migrations for 'users':
  users/migrations/0001_initial.py
    - Create model Profile
  • python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, users
Running migrations:
  Applying users.0001_initial... OK

注意:如果此時python manage.py makemigrations顯示No changes detected,很大可能是你忘了去setting.py裏面“註冊”這個app。

至此,我們就成功創建了一個新的App,並編寫了第一個視圖函數,創建了第一個類。

好了,django的基本介紹就到這裏了,下一篇文章將會介紹如何利用我們創建的Profile類和django自帶的用戶驗證系統,實現基本的登錄註冊功能。
使用django內置的驗證系統

本文代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章