環(huán)境搭建
本次使用Python3.7版本柿汛,Django2.2版本
新建python3.7虛擬環(huán)境
使用pycharm_pro創(chuàng)建一個Django項目MxOline
點擊運行看看是否成功
- 在項目根目錄新建requirements.txt
django==2.2
mysqlclient
pillow
django-pure-pagination
redis
django-simple-captcha
執(zhí)行命令:
pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt
- 配置數(shù)據(jù)庫
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "mxonline",
'USER': 'root',
'PASSWORD': "root",
'HOST': "127.0.0.1"
}
}
本地化
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
此時我們啟動Django會有一個報錯,點擊百度之后發(fā)現(xiàn)是2.2版本的bughttps://www.cnblogs.com/loveprogramme/p/10726712.html修改即解決
遷移數(shù)據(jù)庫
-
訪問admin我們可以看到可以顯示出中文
表設(shè)計
新建一個apps包
-
新建一個users應(yīng)用,并且注冊到settings文件中
-
將users拖至apps中酷鸦,勾選 reference幸乒,我們可以看到注冊自動發(fā)生了變化
在 users應(yīng)用中需要兩個模型
from datetime import datetime
from django.db import models
from django.contrib.auth.models import AbstractUser
GENDER_CHOICES = (
("male", "男"),
("female", "女")
)
class BaseModel(models.Model):
add_time = models.DateTimeField(default=datetime.now, verbose_name="添加時間")
class Meta:
abstract = True
# 將該基類定義為抽象類娜搂,即不必生成數(shù)據(jù)庫表單,只作為一個可以繼承的基類肉盹,把一些子類必須的代碼放在基類,避免重復(fù)代碼也避免重復(fù)錄入數(shù)據(jù)庫
class UserProfile(AbstractUser):
nick_name = models.CharField(max_length=50, verbose_name="昵稱", default="")
birthday = models.DateField(verbose_name="生日", null=True, blank=True)
gender = models.CharField(verbose_name="性別", choices=GENDER_CHOICES, max_length=6)
address = models.CharField(max_length=100, verbose_name="地址", default="")
mobile = models.CharField(max_length=11, verbose_name="手機號碼")
image = models.ImageField(verbose_name="用戶頭像", upload_to="head_image/%Y/%m", default="default.jpg")
class Meta:
verbose_name = "用戶信息"
verbose_name_plural = verbose_name
# verbose_name指定在admin管理界面中顯示中文疹尾;verbose_name表示單數(shù)形式的顯示上忍,verbose_name_plural表示復(fù)數(shù)形式的顯示骤肛;中文的單數(shù)和復(fù)數(shù)一般不作區(qū)別
def unread_nums(self):
#未讀消息數(shù)量
return self.usermessage_set.filter(has_read=False).count()
def __str__(self):
if self.nick_name:
return self.nick_name
else:
return self.username
重新遷移一下
# users表已經(jīng)在Django中注冊了,所以應(yīng)用名是users窍蓝,也不用加models
AUTH_USER_MODEL = "users.UserProfile"
設(shè)置一個超級管理員 admin