ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

学习python-Day60

2022-09-14 21:02:59  阅读:298  来源: 互联网

标签:name CASCADE python 学习 Day60 models delete True verbose


今日学习内容

一、项目开发流程

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

标签:name,CASCADE,python,学习,Day60,models,delete,True,verbose
来源: https://www.cnblogs.com/bjyxxc/p/16694482.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有