【Python使用】嘿马头条项目从到完整开发教程第1篇:简介,1. 内容【附代码文档】

举报
程序员一诺python 发表于 2024/08/16 18:55:20 2024/08/16
【摘要】 本教程的知识点为:简介 1. 内容 2. 目标 产品效果 ToutiaoWeb虚拟机使用说明 数据库 理解ORM 作用 思考: 使用ORM的方式选择 数据库 SQLAlchemy操作 1 新增 2 查询 all() 数据库 分布式ID 1 方案选择 2 头条 使用雪花算法 (代码 toutiao-backend/common/utils/snowflake) 数据库 Redis

本教程的知识点为:简介 1. 内容 2. 目标 产品效果 ToutiaoWeb虚拟机使用说明 数据库 理解ORM 作用 思考: 使用ORM的方式选择 数据库 SQLAlchemy操作 1 新增 2 查询 all() 数据库 分布式ID 1 方案选择 2 头条 使用雪花算法 (代码 toutiao-backend/common/utils/snowflake) 数据库 Redis 1 Redis事务 基本事务指令 Python客户端操作 Git工用流 调试方法 JWT认证方案 JWT & JWS & JWE Json Web Token(JWT) OSS对象存储 七牛云存储 需求 方案 使用 缓存 缓存架构 多级缓存 头条项目的方案 缓存数据 缓存 缓存问题 1 缓存 2 缓存 头条项目缓存与存储设计 APScheduler定时任务 定时修正统计数据 RPC RPC简介 1. 什么是RPC RPC 编写客户端 头条首页新闻推荐接口编写 即时通讯 即时通讯简介 即时通讯 Socket.IO 1 简介 优点: 缺点: Elasticsearch 简介与原理 1 简介 属于面向文档的数据库 2 搜索的原理——倒排索引(反向索引)、分析、相关性排序 Elasticsearch 文档 索引文档(保存文档数据) 获取指定文档 判断文档是否存在 单元测试 为什么要测试 测试的分类 什么是单元测试 断言方法的使用:

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

简介

1. 内容

  • 项目介绍
  • 数据库方案
  • Gitflow工作流
  • 认证方案
  • 对象存储
  • 缓存方案
  • RPC方案 grpc
  • 搜索方案
  • 即时通讯方案
  • APScheduler定时任务
  • supervisor进程管理

2. 目标

  • 以头条产品为依托案例,但不再以具体业务实现为主
  • 力求掌握解决不同问题的实施方案
  • 深入理解并巩固前面所学的知识

产品效果

  • 用户端

  • 移动web

[

  • iOS

[ (App下载地址)](

ios

  • Android

[ (App下载地址)](

安卓

  • 自媒体端

[

  • MIS管理后台

[

ToutiaoWeb虚拟机使用说明

  • 作为项目的开发环境
  • 黑窗口 无GNOME 模拟企业中的开发服务器环境

  • CentOS7.2

  • 开机前先将虚拟机调成NAT模式

  • 虚拟机占用内存4G,如果主机内存不足,可启动前将内存占用调为2G
  • 在Windows中使用SSH客户端

  • Termius

  • xshell

  • ssh python@自己的ip地址

  • 用户名 密码

  • 系统

    • root -> chuanzhi
    • python -> chuanzhi
  • MySQL

    • root -> mysql
  • 端口

  • MySQL (mariadb)

    • master -> 3306
    • slave -> 8306 (mysql -uroot -p -h 127.0.0.1 --port=8306)
  • Redis

    • cluster -> 7000 7001 7002 7003 7004 7005
    • master & slave -> 6380 6381
    • sentinel -> 26380 26381 26382
  • Elasticsearch 5

    • 9200
  • Python 虚拟环境

  • workon toutiao

  • 关机 sudo shutdown now

  • 重启 reboot

Pycharm远程开发

可以在Windows中使用Pycharm编写代码,而代码的调试运行可以使用远程服务器中的python解释器。

在本地创建好工程项目(或从git上clone下代码)后,用Pycharm打开:

  1. 打开「Tools」设置 「Deployment」

1

  1. 选择SFTP

2

  1. 设置服务器名字

3

  1. 设置服务器信息
*图片无法加载*
  1. 测试服务器连接是否可用

5

  1. 设置上传代码的目录映射

6

  1. 打开设置,设置远程Python解释器

7

  1. 选择已存在的服务器设置

8

  1. 选择Create 复制服务器设置到解释器中

9

10

  1. 选择远程服务器中虚拟环境里的解释器
/home/python/.virtualenvs/toutiao/bin/python

11

  1. 设置远程服务器运行代码的目录映射

12

  1. 若Pycharm不能自动上传代码,可勾选Automatic Upload

13

注意,设置后Pycharm要加载环境,需要花费一定时间(只在配置后第一次使用发生)

产品与开发

1 产品介绍

头条是一款基于个性化推荐的科技资讯类阅读产品,类似于今日头条,产品分为以下几个终端:

  1. 用户端

用户获取个性化推荐资讯的终端,有阅读、关注、评论、智能客服(聊天机器人)等功能,分移动Web页面及iOS和安卓手机App。

  1. 自媒体端

自媒体端是自媒体作者编辑、发布资讯文章、查看自媒体号运营数据的平台。

  1. MIS管理后台

MIS管理后台是头条产品公司运营管理的后台,可进行用户管理、文章审核及管理、评论管理等。

2 原型图与UI图

  • 产品原型图

产品经理制作,是产品的原型设计,表达产品的功能组成

产品原型图的查看,需要安装Axure RP的Chrome浏览器扩展,方式如下:

  1. 进入Chrome浏览器「扩展程序」页面

第一步

  1. 打开「开发者模式」

第二步

  1. 点击「加载已解压的扩展程序」,并选择「Axure_RP_Extension_for_Chrome_0.6.3」目录

第三步

  1. 选择已安装扩展的「详细信息」

第四步

  1. 打开「允许访问文件网址」

第五步

安装后,打开原型图目录中的「index.html」文件即可。

原型图包含:

  • 前台原型图

    • 用户端
    • 自媒体端
  • 后台原型图(MIS管理后台)

  • UI效果图

用户界面效果图,由UI人员设计,是产品最终的用户能够看到的产品样式效果。

3 技术架构

项目采用前后端分离模式。

技术架构

4 开发

人员团队(最少规模):

  • 产品经理 1人

  • UI 1人

  • 前端 2~3 人

  • Flutter 开发APP

  • Vue 开发Web页面

  • Web后端 2~3人

  • 推荐系统 2~3 人

  • Chatbot 1~2 人

  • 测试 1~2 人

开发平台

  • Gitlab

请到[

为方便将大家拉入到项目团队中,注册帐号的要求

gitlab注册

注意:此gitlab不要放私人项目,会定期清理数据。

  • 使用Windows的同学需要在windows中安装git

  • YApi 接口管理

[

数据库

  • 数据库设计

  • SQLAlchemy

  • 数据库理论

  • 分布式ID

  • Redis

数据库

  • 数据库设计

  • SQLAlchemy

  • 数据库理论

  • 分布式ID

  • Redis

数据库设计

1 需求

根据头条前台产品原型图中用户端的部分,进行数据库设计。

  • 表结构
  • 字段类型、是否允许为null、是否有默认值
  • 索引设计
  • 数据库引擎的选择

2 注意事项

  • 为了查询效率,可以做冗余字段设计(空间换时间的思想,属于一种反范式设计)

  • 字段类型的选择

  • 整型的存储大小与显示大小

    mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同。如果不同,分别是多大?

我们建立下面这张表:

CREATE TABLE `test` (
       `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
       `i1` int(3) unsigned zerofill DEFAULT NULL,
       `i2` int(6) unsigned zerofill DEFAULT NULL,
       PRIMARY KEY (`id`)
   ) ENGINE=MyISAM DEFAULT CHARSET=utf8

插入一些数据后

发现,无论是int(3), int(6), 都可以显示6位以上的整数。但是,当数字不足3位或6位时,前面会用0补齐。

手册解释是这样的:

MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

也就是说,int的长度并不影响数据的存储精度,长度只和显示有关,为了让大家看的更清楚,我们在上面例子的建表语句中,使用了zerofill。

最终答案:存储范围相同

  • char 与 varchar 的选择

    • char 不可变,查询效率高,可能造成存储浪费
    • varchar 可变,查询效率不如char,节省空间

常见MySQL数据类型

类 型 大 小 描 述
CAHR(Length) Length字节 定长字段,长度为0~255个字符
VARCHAR(Length) String长度+1字节或String长度+2字节 变长字段,长度为0~65 535个字符
TINYTEXT String长度+1字节 字符串,最大长度为255个字符
TEXT String长度+2字节 字符串,最大长度为65 535个字符
MEDIUMINT String长度+3字节 字符串,最大长度为16 777 215个字符
LONGTEXT String长度+4字节 字符串,最大长度为4 294 967 295个字符
TINYINT(Length) 1字节 范围:-128~127,或者0~255(无符号)
SMALLINT(Length) 2字节 范围:-32 768~32 767,或者0~65 535(无符号)
MEDIUMINT(Length) 3字节 范围:-8 388 608~8 388 607,或者0~16 777 215(无符号)
INT(Length) 4字节 范围:-2 147 483 648~2 147 483 647,或者0~4 294 967 295(无符号)
BIGINT(Length) 8字节 范围:-9 223 372 036 854 775 808~9 223 372 036 854 775 807,或者0~18 446 744 073 709 551 615(无符号)
FLOAT(Length, Decimals) 4字节 具有浮动小数点的较小的数
DOUBLE(Length, Decimals) 8字节 具有浮动小数点的较大的数
DECIMAL(Length, Decimals) Length+1字节或Length+2字节 存储为字符串的DOUBLE,允许固定的小数点
DATE 3字节 采用YYYY-MM-DD格式
DATETIME 8字节 采用YYYY-MM-DD HH:MM:SS格式
TIMESTAMP 4字节 采用YYYYMMDDHHMMSS格式;可接受的范围终止于2037年
TIME 3字节 采用HH:MM:SS格式
ENUM 1或2字节 Enumeration(枚举)的简写,这意味着每一列都可以具有多个可能的值之一
SET 1、2、3、4或8字节 与ENUM一样,只不过每一列都可以具有多个可能的值
  • 索引

  • 主键 Primary Key

  • 外键 Foreign Key

    • 保持数据完整性
ALTER TABLE tbl_name
       ADD [CONSTRAINT [symbol]] FOREIGN KEY
       [index_name] (index_col_name, ...)
       REFERENCES tbl_name (index_col_name,...)
       [ON DELETE reference_option]
       [ON UPDATE reference_option]

例如:

ALTER TABLE `user_resource` CONSTRAINT `FKEEAF1E02D82D57F9` FOREIGN KEY (`user_Id`) REFERENCES `sys_user` (`Id`)

CASCADE

在父表上update/delete记录时,同步update/delete掉子表的匹配记录

  * ON DELETE:删除主表时自动删除从表。删除从表,主表不变
  * ON UPDATE:更新主表时自动更新从表。更新从表,主表不变

SET NULL

在父表上update/delete记录时,将子表上匹配记录的列设为null (要注意子表的外键列不能为not null)

  * ON DELETE:删除主表时自动更新从表值为NULL。删除从表,主表不变
  * ON UPDATE:更新主表时自动更新从表值为NULL。更新从表,主表不变

NO ACTION

如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作

  * ON DELETE:从表记录不存在时,主表才可以删除。删除从表,主表不变
  * ON UPDATE:从表记录不存在时,主表才可以更新。更新从表,主表不变

RESTRICT

同no action, 都是立即检查外键约束

SET DEFAULT

父表有变更时,子表将外键列设置成一个默认的值 但Innodb目前不支持

  • 索引 Key / Index

    • 提升查询效率,减慢增删改速度
  • 唯一约束 Unique

    • 保证数据不重复
  • MySQL数据库引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎

SHOW ENGINES  # 命令来查看MySQL提供的引擎

SHOW VARIABLES LIKE 'storage_engine'; # 查看数据库默认使用哪个引擎

InnoDB存储引擎

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是默认的MySQL引擎。InnoDB主要特性有:

1、InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎

InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合

2、InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的

3、In

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。