学习python-Day60

2022/9/15 1:17:30

本文主要是介绍学习python-Day60,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

今日学习内容

一、项目开发流程

BBS:多人博客系统 需要用到 django,mysql

传统软件行业:给第三方做解决方案

互联网行业:饿了么,叮咚买菜...

软件开发流程

  1. 项目立项(高层,市场人员(市场调研),跟客户对接)

  2. 项目设计(产品经理:设计软件功能,设计原型图)

  3. 项目的具体设计(UI:切图)

  4. 分任务开发

    前端:pc,小程序,移动端(分任务开发)

    后端:架构,数据库设计(设计表,表关联)

    ​ 多人系统开发

  5. 联调,就是前后端整合一下。

  6. 测试:功能测试,自动化测试,接口测试

  7. 上线运行:运维

  8. 出现bug,项目维护阶段

  9. 版本迭代

二、bbs项目表设计及关联

1.bbs开发的功能

  • 注册功能
  • 登录功能
  • 首页:文章展示,导航栏,用户中心,广告位
  • 个人主页:文章展示,侧边栏过滤(分类,标签,时间)
  • 文章详情:点赞点踩,评论(父评论,子评论)
  • 后台管理:个人文章展示(增加,删除,修改文章)
  • 发布文章:富文本编译器,xss攻击处理

针对技术选择的版本:python3.8 django2.2.2 mysql5.7 jquery2.x bootsrap@3

2.设计数据库

数据库名字 bbs

  • 用户表(基于auth的user表扩写,扩写字段)
  • 博客表(跟用户表一对一)
  • 标签表
  • 分类表
  • 文章表
  • 点赞点踩表
  • 评论表

3.表的关联表

  • 用户表(基于auth的user表的扩写,扩写字段)
  • 博客表------------------用户表(一对一)
  • 标签表------------------博客表(一对多),文章表(多对多)
  • 分类表------------------博客表(一对多),文章表(一对多)
  • 文章表------------------博客表(一对多),
  • 点赞点踩表------------用户表(一对多),文章表(一对多)
  • 评论表-------------------用户表(一对多),文章表(一对多)

image

三、项目表字段编写和表迁移

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文件中

image

AUTH_USER_MODEL = '应用名.类名'

安装pymysql

数据库迁移会出现问题:

image

针对这种问题的解决措施是:

1.安装pymysql
	pip3 install pymysql

还会出现这种问题:

image

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()
    

image

最简单方式就是直接使用 mysqlclient:有可能装不上
 pip3 install mysqlclient


这篇关于学习python-Day60的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程