環境:python3.7 +Django2.2
此項目是轉載於https://www.liujiangblog.com/course/django/此大神的博客,為了自己練習,熟悉自己的python技術。
再此項目中,一直會優化原來寫的代碼,逐漸進步。
一、搭建項目環境
1、打開pycharm,新建項目
- 在Location處選擇工程目錄
- 在New environment using處選擇Virtualenv(這可能需要你提前pip install virtualenv進行虛擬工具virtualenv的安裝)。通常情況下,虛擬環境會以venv的名字,自動在工程目錄下生成。
- 在Base interpreter處,選擇你要使用的Python解釋器
- 下面兩個單選框,根據需要自行選擇
- 如果想使用現成的解釋器或者虛擬環境,請選擇Existing interpreter
- 注意:app應用我們就不注冊了,系統幫我們已經注冊好了。
(2)設置語言和時區
修改setings.py
LANGUAGE_CODE = 'zh-hans' # 這里修改了 TIME_ZONE = 'Asia/Shanghai' # 這里修改了 USE_I18N = True USE_L10N = True USE_TZ = False # 這里修改了
(3)啟動開發服務器
默認主機HOST為127.0.0.1
,Port:8000
也可以在運行的時候修改端口,也可以在pycharm 里面設置 Run/Debug Configurations自己修改自定義的
(3)登錄127.0.0.1:8000
二、設計數據模型
用Django開發Web應用的過程中,很多人都是急急忙忙地寫視圖,寫前端頁面,把最根本的模型設計給忽略了。模型中定義了數據如何在數據庫內保存,也就是數據表的定義方式。這部分工作體現在Django的代碼中,其實就是model類的設計。
(1)數據庫模型設計
作為一個用戶登錄和注冊項目,需要保存的都是各種用戶的相關信息。很顯然,我們至少需要一張用戶表User,在用戶表里需要保存下面的信息:
- 用戶名
- 密碼
- 郵箱地址
- 性別
- 創建時間
我們現在就暫定保存這些信息吧,更多的內容,請大家在實際項目中自行添加。
進入login/models.py
文件,這里將是我們整個login應用中所有模型的存放地點,代碼如下

from django.db import models # Create your models here. class User(models.Model): gender = ( ('male', "男"), ('female', "女"), ) name = models.CharField(max_length=128, unique=True) password = models.CharField(max_length=256) email = models.EmailField(unique=True) sex = models.CharField(max_length=32, choices=gender, default="男") c_time = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name class Meta: ordering = ["-c_time"] verbose_name = "用戶" verbose_name_plural = "用戶"
各字段含義:
- name: 必填,最長不超過128個字符,並且唯一,也就是不能有相同姓名;
- password: 必填,最長不超過256個字符(實際可能不需要這么長);
- email: 使用Django內置的郵箱類型,並且唯一;
- sex: 性別,使用了一個choice,只能選擇男或者女,默認為男;
- 使用
__str__
方法幫助人性化顯示對象信息; - 元數據里定義用戶按創建時間的反序排列,也就是最近的最先顯示;
注意:這里的用戶名指的是網絡上注冊的用戶名,不要等同於現實中的真實姓名,所以采用了唯一機制。如果是現實中的人名,那是可以重復的,肯定是不能設置unique的。另外關於密碼,建議至少128位長度,原因后面解釋。
(2)設置數據庫后台
定義好了模型后,就必須選擇我們用來保存數據的數據庫系統。Django支持Mysql,SQLite,Oracle等等。
Django中對數據庫的設置在settings文件中,如下部分:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
關於數據庫的操作和設置數據庫為mysql,可以參考我此條博客https://www.cnblogs.com/sunjinchao/articles/12064393.html
Django默認使用SQLite數據庫,並內置SQLite數據庫的訪問API,也就是說和Python一樣原生支持SQLite。本項目使用SQLite作為后端數據庫,因此不需要修改settings中這部分內容。如果你想要使用別的數據庫,請自行修改該部分設置。
(3)創建記錄和數據表
python manage.py makemigrations
#######################################
(venv) C:\Users\mzy\PycharmProjects\mysite>python manage.py makemigrations
Migrations for 'login':
login\migrations\0001_initial.py
- Create model User
###################################################
python manage.py migrate
##################################################
(venv) C:\Users\mzy\PycharmProjects\mysite>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, login, sessions
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
ts... 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 login.0001_initial... OK
Applying sessions.0001_initial... OK