今日学习内容
BBS:多人博客系统 需要用到 django,mysql
传统软件行业:给第三方做解决方案
互联网行业:饿了么,叮咚买菜...
软件开发流程:
项目立项(高层,市场人员(市场调研),跟客户对接)
项目设计(产品经理:设计软件功能,设计原型图)
项目的具体设计(UI:切图)
分任务开发
前端:pc,小程序,移动端(分任务开发)
后端:架构,数据库设计(设计表,表关联)
多人系统开发
联调,就是前后端整合一下。
测试:功能测试,自动化测试,接口测试
上线运行:运维
出现bug,项目维护阶段
版本迭代
针对技术选择的版本:python3.8 django2.2.2 mysql5.7 jquery2.x bootsrap@3
数据库名字 bbs
第一步:安装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数据库
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 = '应用名.类名'
数据库迁移会出现问题:
针对这种问题的解决措施是:
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