今日学习内容
一、项目开发流程
BBS:多人博客系统 需要用到 django,mysql
传统软件行业:给第三方做解决方案
互联网行业:饿了么,叮咚买菜…
软件开发流程:
-
项目立项(高层,市场人员(市场调研),跟客户对接)
-
项目设计(产品经理:设计软件功能,设计原型图)
-
项目的具体设计(UI:切图)
-
分任务开发
前端:pc,小程序,移动端(分任务开发)
后端:架构,数据库设计(设计表,表关联)
多人系统开发
-
联调,就是前后端整合一下。
-
测试:功能测试,自动化测试,接口测试
-
上线运行:运维
-
出现bug,项目维护阶段
-
版本迭代
二、bbs项目表设计及关联
1.bbs开发的功能
- 注册功能
- 登录功能
- 首页:文章展示,导航栏,用户中心,广告位
- 个人主页:文章展示,侧边栏过滤(分类,标签,时间)
- 文章详情:点赞点踩,评论(父评论,子评论)
- 后台管理:个人文章展示(增加,删除,修改文章)
- 发布文章:富文本编译器,xss攻击处理
针对技术选择的版本:python3.8 django2.2.2 mysql5.7 jquery2.x bootsrap@3
2.设计数据库
数据库名字 bbs
- 用户表(基于auth的user表扩写,扩写字段)
- 博客表(跟用户表一对一)
- 标签表
- 分类表
- 文章表
- 点赞点踩表
- 评论表
3.表的关联表
- 用户表(基于auth的user表的扩写,扩写字段)
- 博客表——————用户表(一对一)
- 标签表——————博客表(一对多),文章表(多对多)
- 分类表——————博客表(一对多),文章表(一对多)
- 文章表——————博客表(一对多),
- 点赞点踩表————用户表(一对多),文章表(一对多)
- 评论表——————-用户表(一对多),文章表(一对多)
三、项目表字段编写和表迁移
1.创建项目
第一步:安装django 2.2.2
pip3 install django == 2.2.2
第二步:使用pycharm创建项目
第三步:配置文件(settings.py)
将 TEMPLATES = [...'DIRS': [BASE_DIR / 'templates'],...] 中 DIRS 修改。
'DIRS':[os.path.join(BASE_DIR , 'templates')]
国际化:
LANGUAGE_CODE = 'zh-hans' # 语言中文
TIME_ZONE = 'Asia/Shanghai' # 时区使用上海时区
USE_I18N = True
USE_L10N = True
USE_TZ = False
使用mysql
创建bbs数据库
2.在models中写表模型
from django.db import models
from django.contrib.auth.models import AbstractUser
# 继承AbstractUser,扩写字段:头像字段,手机号字段,一对一的博客字段。
class UserInfo(AbstractUser):
phone = models.CharField(max_length=32, null=True)
avatar = models.FileField(upload_to='avatar', default='avatar/default.png')
blog = models.OneToOneField(to='Blog', on_delete=models.CASCADE, null=True)
'''
FileField:存文件的字段>>>本质还是varchar, 可以把文件自动保存(avatar文件夹下),存文件地址
OneToOneField:一对一关联表
upload_to:上传自动保存到xxx文件,传入空则取默认值为avatar或者是命名为default.png图片
verbose_name:供后台管理使用,表示注释。
'''
class Blog(models.Model):
title = models.CharField(max_length=32, null=True, verbose_name='主标题')
site_name = models.CharField(max_length=32, null=True, verbose_name='副标题')
site_style = models.CharField(max_length=32, null=True, verbose_name='个人站点样式')
class Tag(models.Model):
name = models.CharField(max_length=32, verbose_name='标签名字')
# on_delete可以有很多选项,目前先用级联删除(很危险)
blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE)
class Article(models.Model):
title = models.CharField(max_length=32, verbose_name='文章名字')
desc = models.CharField(max_length=255, verbose_name='文章摘要')
content = models.TextField(verbose_name='文章内容')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='文章创建时间')
blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE)
category = models.ForeignKey(to='Category', on_delete=models.CASCADE)
tag = models.ManyToManyField(to='Tag')
'''
TextField:大文本
auto_now_add=True 新增文章字段可以不传,自动更新为当前时间。
多对多关系,需要创建第三张表。
django的orm的ManytoManyField字段可以自动创建第三张表(ArticleToTag)
手动创建第三张表:ManyToManyField一定要加两个参数,through = 中间表, through_field 通过哪两个字段关联。
'''
class UpAndDown(models.Model):
user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE)
article = models.ForeignKey(to='Article', on_delete=models.CASCADE)
is_up = models.BooleanField(verbose_name='点赞或者点踩')
create_time = models.DateTimeField(auto_now_add=True)
class Comment(models.Model):
user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE)
article = models.ForeignKey(to='Article', on_delete=models.CASCADE)
content = models.CharField(max_length=64, verbose_name='评论的内容')
# 外联方式
# parent = models.ForeignKey(to='Comment', on_delete=models.CASCADE)
# parent = models.IntegerField(null=True)
parent = models.ForeignKey(to='self', on_delete=models.CASCADE, null=True)
'''
自关联字段>>>父评论>>>子评论
id user article content parent
1 2 1 写的好 空
2 2 2 写不好 空
3 3 2 好的! 空
'''
class Category(models.Model):
name = models.CharField(max_length=32, verbose_name='分类的名字')
blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE)
注意:继承AbstractUser
需要写一行代码在settings.py
文件中
AUTH_USER_MODEL = '应用名.类名'
安装pymysql
数据库迁移会出现问题:
针对这种问题的解决措施是:
1.安装pymysql
pip3 install pymysql
还会出现这种问题:
2.
django默认操作mysql数据库使用的是 mysqlDB模块,在python2中没有问题,
但是在python3中已经不维护了,不支持python3中操作mysql。所以python3用pymysql比较多,但是需要加入下面两句话才嗯呢该正常使用。
'''
猴子补丁:动态替换---把源码使用mysqlDB替换成pymsql的东西。
'''
注意:django2.0.7及以后版本,需要该源码才能使用:operation.py
146行:改成query = query.encode(errors='replace')
在 __init__.py 或者 settings.py 文件加入
import pymysql
pymysql.install_as_MySQLdb()
最简单方式就是直接使用 mysqlclient:有可能装不上
pip3 install mysqlclient
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/289488.html