django搭建一个个人博客(Python全栈开发日记)第一天:准备项目环境

一,准备项目环境

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

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值