一,准备项目环境
1.创建python项目
2.安装3.2.10版本的django
3.创建django项目
此刻的目录结构:
可以配置选项快速启动
4.创建app
settings配置
二,基础环境配置
1.模版文件配置
创建templates,并且进行设置
进行settings配置
2.配置scss预编译器
(记得安装node.js,在安装sass,sass-loader)
如果配置成功,按照下面的目录,创建index.scss会自动生成css和.map
3.静态文件配置
在setting中
4.用户上传文件配置
创建文件夹media,设置settings
配置路由
5.MySQL数据库配置
安装pymysql
在对应的app的init文件中
import pymysql
pymysql.install_as_MySQLdb()
settings进行设置
三,表结构搭建
现在settings中设置
AUTH_USER_MODEL = "app01.UserInfo"
from django.db import models from django.contrib.auth.models import AbstractUser from django.db.models.signals import pre_delete # 删除文件 from django.dispatch.dispatcher import receiver # 删除文件 # 用户表 class UserInfo(AbstractUser): # 继承django的auth表 nid = models.AutoField(primary_key=True) nick_name = models.CharField(max_length=16, verbose_name='昵称', null=True, blank=True) token = models.CharField(verbose_name='id', help_text='其他平台的唯一登录id', max_length=64, null=True, blank=True) ip = models.GenericIPAddressField(verbose_name='ip地址', default='127.0.0.1', null=True, blank=True) addr = models.TextField(verbose_name='用户地址信息', null=True, blank=True) avatar = models.ForeignKey( to='Avatars', to_field='nid', on_delete=models.SET_NULL, # 如果删除了头像,那么用户对应的这个字段就为 null verbose_name='用户头像', null=True, blank=True, ) collects = models.ManyToManyField( to='Articles', verbose_name='收藏的文章', blank=True ) class Meta: verbose_name_plural = '用户' # 用户头像表 class Avatars(models.Model): nid = models.AutoField(primary_key=True) url = models.FileField(verbose_name='用户头像地址', upload_to='avatars/') def __str__(self): return str(self.url) class Meta: verbose_name_plural = '用户头像' # 删除头像 @receiver(pre_delete, sender=Avatars) # sender=你要删除或修改文件字段所在的类** def avatar_delete(instance, **kwargs): # 函数名随意 # print('进入文件删除方法,删的是', instance.url) # 用于测试 instance.url.delete(False) # file是保存文件或图片的字段名** # 文章表 class Articles(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(verbose_name='标题', max_length=32) abstract = models.CharField(verbose_name='文章简介', max_length=128, null=True, blank=True) content = models.TextField(verbose_name='文章内容') create_date = models.DateTimeField(verbose_name='文章发布日期', auto_now_add=True) change_date = models.DateTimeField(verbose_name='文章修改日期', auto_now=True) recommend = models.BooleanField(verbose_name='是否上推荐', default=True) cover = models.ForeignKey( to='Cover', to_field='nid', on_delete=models.SET_NULL, verbose_name='文章封面', null=True, blank=True ) look_count = models.IntegerField(verbose_name='文章阅读量', default=0) comment_count = models.IntegerField(verbose_name='文章评论量', default=0) digg_count = models.IntegerField(verbose_name='文章点赞量', default=0) collects_count = models.IntegerField(verbose_name='文章收藏数', default=0) tag = models.ManyToManyField( to='Tags', verbose_name='文章标签', blank=True ) author = models.CharField(max_length=16, verbose_name='作者', null=True, blank=True) source = models.CharField(max_length=32, verbose_name='来源', null=True, blank=True) link = models.URLField(verbose_name='文章链接', null=True, blank=True) def __str__(self): return self.title class Meta: verbose_name_plural = '文章' # 评论表 class Comment(models.Model): nid = models.AutoField(primary_key=True) digg_count = models.IntegerField(verbose_name='点赞', default=0) article = models.ForeignKey(verbose_name='评论文章', to='Articles', to_field='nid', on_delete=models.CASCADE) user = models.ForeignKey(verbose_name='评论者', to='UserInfo', to_field='nid', on_delete=models.CASCADE, null=True) content = models.TextField(verbose_name='评论内容') comment_count = models.IntegerField(verbose_name='子评论数', default=0) create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) parent_comment = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE, verbose_name='是否是父评论') def __str__(self): return self.content class Meta: verbose_name_plural = '评论' # 文章封面 class Cover(models.Model): nid = models.AutoField(primary_key=True) url = models.FileField(verbose_name='文章封面地址', upload_to='article_img/') def __str__(self): return str(self.url) class Meta: verbose_name_plural = '文章封面' # 删除封面 @receiver(pre_delete, sender=Cover) # sender=你要删除或修改文件字段所在的类** def cover_delete(instance, **kwargs): # 函数名随意 # print('进入文件删除方法,删的是', instance.url) # 用于测试 instance.url.delete(False) # file是保存文件或图片的字段名** # 标签表 class Tags(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=16, verbose_name='标签名字') def __str__(self): return self.title class Meta: verbose_name_plural = '文章标签' # 站点背景 class Menu(models.Model): nid = models.AutoField(primary_key=True) menu_title = models.CharField(verbose_name='菜单名称', max_length=16, null=True) menu_title_en = models.CharField(verbose_name='菜单英文名称', max_length=32, null=True) title = models.CharField(verbose_name='slogan', max_length=32, null=True) abstract = models.TextField(verbose_name='slogan介绍', help_text='多个之间按分号区分', null=True) abstract_time = models.IntegerField(verbose_name='slogan切换时间', help_text='单位秒,默认是8秒', default=8) rotation = models.BooleanField(verbose_name='是否轮播slogan介绍', default=True) menu_url = models.ManyToManyField( to='MenuImg', verbose_name='菜单图片', help_text='可以多选,多选就会轮播', ) menu_rotation = models.BooleanField(verbose_name='是否轮播banner图', help_text='多选默认会轮播', default=False) menu_time = models.IntegerField(verbose_name='背景图切换时间', help_text='单位秒,默认是8秒', default=8) class Meta: verbose_name_plural = '站点背景' # 站点背景 class MenuImg(models.Model): nid = models.AutoField(primary_key=True) url = models.FileField(verbose_name='图片地址', upload_to='site_bg/') def __str__(self): return str(self.url) class Meta: verbose_name_plural = '站点背景图'
进行数据库迁移
python manage.py makemigrations
python manage.py migrate