歡迎查看本系列的其他文章:
- postgres安裝與入門
- django安裝與入門
- 使用django內置的驗證系統
- 使用django的表單簡化代碼
- 使用Bootstrap美化網頁
Django實現迷你淘寶(二) — Django安裝與簡介
文章目錄
一、安裝Django
1.1 安裝python
官網下載最新版的python(至少3.0+),按照提示安裝
1.2 配置Emacs
安裝yapf,一款Google出品的python文件自動格式化工具
pip install yapf
打開Emacs
M+x list-packages
列出所有安裝包install py-yapf
,py-yapf會在保存python文件是自動調用yapf調整格式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
運行程序,成功運行的話,證明切換數據庫成功
常見問題
- 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.py
和urls.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”三步走
- 在
models.py
裏面修改model python manage.py makemigrations
,針對新的更改,生成migrationspython manage.py migrate
,應用上一步生成的migrations
牢記每次修改模型後,都需要運行makemigrations
和migrate
兩個步驟,這兩個就是告訴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內置的驗證系統