首页 > 其他分享 >全栈后端之大型项目结构(一)

全栈后端之大型项目结构(一)

时间:2022-11-02 07:55:05浏览次数:72  
标签:git -- black Python 全栈 大型项目 isort import 结构

大型项目结构

本文摘抄:青灯教育课程,版权归青灯所有,仅供学习使用。

对于中小项目来说,使用程序包足以满足开发的需求。但如果项目更加复杂和庞大,我们就需要学习一些进阶的项目组织技巧来规划整个项目。

项目分析

  • 一个技术交流论坛的Web项目,主要为用户提供最新的技术文章与交流

  • 以抓取其他网站数据和用户发布作为文章的主要来源

  • 基于 Flask 框架,以 前后端部分分离 的形式实现具体业务逻辑

技术实现

  • 基于 Python 3.8 + Flask2.x 框架实现

  • 数据存储使用 Redis + MySQL 实现

  • 第三方扩展:

    • 腾讯云:腾讯云 COS 文件存储平台

    • 腾讯云:腾讯云短信验证码平台

  • 布署:基于ubuntu 18.04系统,使用 Gunicorn + Nginx 进行布署

功能模块

  • 文章模块

    • 首页文章列表

    • 文章详情

  • 用户模块

    • 登录注册/个人信息修改

    • 文章收藏/发布

  • 后台管理

    • 用户数据管理

    • 博客文章管理

具体需求

  论坛展示

  1. 首页

    • 根据分类进行文章列表展示

    • 上拉加载更多数据

    • 点击新窗口跳转到文章详情页

    • 顶部显示用户登录信息,未登录显示登录/注册按钮

    • 右侧显示文章点击排行

  2. 注册

    • 用户账号为手机号

    • 图片验证码正确后才能发送短信验证码

    • 短信验证码每60秒发送一次

    • 条件出错时有相应的错误提示

  3. 登录

    • 用手机号与密码登录

    • 错误时有相应的提示

  4. 文章详情

    • 文章内容 html 数据展示

    • 用户点击收藏可以收藏当前文章

    • 根据当前登录用户显示收藏状态

    • 用户可以评论该文章

    • 其他用户可以回复某一条评论

    • 右侧显示文章点击排行

    • 如果当前文章由具体作者发布,右侧显示作者信息,并且可以关注作者

项目搭建

使用 GIT 管理源代码

  Git是什么?一个版本控制系统(VCS),采取的是分布式管理。教程:https://www.liaoxuefeng.com/wiki/896043488029600

  git 常用命令

    (venv) E:\git --help

    usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] ​ [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] ​ [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare] ​ [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] ​ <command> [<args>]

    These are common Git commands used in various situations:(以下是在不同情况下使用的常见Git命令:)

        start a working area (see also: git help tutorial)(启动一个工作区(参见:git帮助教程))

        clone   Clone a repository into a new directory(将存储库克隆到一个新目录中)

        init    Create an empty Git repository or reinitialize an existing one(创建一个空的Git存储库或重新初始化一个现有的存储库)

 

        work on the current change (see also: git help everyday)(处理当前的更改(参见:git help everyday))

         add    Add file contents to the index(将文件添加到索引中)

         mv     Move or rename a file, a directory, or a symlink(移动或重命名文件、目录或符号链接)

 

         restore Restore working tree files(恢复工作树文件)

        rm     Remove files from the working tree and from the index(从工作树和索引中删除文件)

        examine the history and state (see also: git help revisions)(检查历史和状态(参见:git帮助修订)) ​

        bisect  Use binary search to find the commit that introduced a bug(使用二分查找查找引入错误的提交)

        diff    Show changes between commits, commit and working tree, etc(显示提交、提交和工作树之间的更改)

        grep    Print lines matching a pattern(打印符合图案的线条)

        log   Show commit logs(打印符合图案的线条)

        show  Show various types of objects(显示各种类型的对象)

        status   Show the working tree status(显示工作树状态)

 

        grow, mark and tweak your common history(成长,标记和调整你们共同的历史)

        branch   List, create, or delete branches(列出、创建或删除分支)

        commit   Record changes to the repository(记录对存储库的更改)

        merge   Join two or more development histories together(将两个或多个开发历史连接在一起)

        rebase   Reapply commits on top of another base tip(在另一个基本技巧之上重新应用提交)

        reset    Reset current HEAD to the specified state(重置当前HEAD到指定状态)

        switch   Switch branches(切换分支)

        tag     Create, list, delete or verify a tag object signed with GPG(创建、列出、删除或验证与GPG签名的标记对象)

 

        collaborate (see also: git help workflows)(协作(参见:git帮助工作流))

        fetch    Download objects and refs from another repository(从另一个存储库下载对象和引用)

        pull      Fetch from and integrate with another repository or a local branch(从另一个存储库或本地分支获取并与之集成)

        push   Update remote refs along with associated objects(更新远程引用和相关的对象)

git使用步骤:

  1)初始化 git

    $ cd [项目目录]
    $ git init

  2)配置当前项目git提交信息(可省略此步,如不配置则使用全局配置)

    git config user.name XXX
    git config user.email [email protected]

  3)添加忽略文件

    $ touch .gitignore

  4)设置忽略文件内容(后续根据需要再添加)

    .idea
    *.py[cod]
    *.log

  5) 添加所有文件到暂存区

    $ git add .

  6)提交到本地仓库并填写注释

    $ git commit -m 'init'

 

代码风格统一之black模块

摘自:http://zhengxin.qingdengedu.com/posts/pycharm/01black.html

       在开发大型项目是时,使不同成员在不同编辑器下工作也可以得到完全相同的风格是非常重要的一件事情,这样可以减轻沟通成本。在前端社区有层出不出不穷的代码格式化工具,但是在 python 社区中也有不少工具,例如 pycharm 默认的 pep8 、autopep8,而black则是我遇到的最好用的。

  black可以在命令行里面使用,也可以与编辑器集成一起使用,接下来就讲解一下是怎么使用的。

 

安装:

可以通过 pip 直接从 PyPI 下载安装:

pip install black

注意需要 Python 3.6.2 以上的版本

如果急于试用最新版本,可以通过下面的命令从 GitHub 安装(不推荐):

pip install git+git://github.com/psf/black

 

使用:

black {source_file_or_directory}
​
# black {文件或者目录}
# 对所有代码格式化
black .

在 PyCharm 中使用

      相比于每次都专门打开一个终端,手动使用命令行调用 Black 格式化代码,我们更希望能把 Black 集成到我们常用的编辑器中,不需要离开写代码的界面即可完成格式化操作。

确认 Black 安装位置

在 macOS / Linux 上:
$ which black
/usr/local/bin/black  # 可能的位置

 在 Windows 上:

$ where black
D:\anaconda38\Scripts\black.exe  # 可能的位置

如果是使用虚拟环境,则直接使用$PyInterpreterDirectory$/black作为程序路径。

添加外部工具

打开 文件 -> 设置 -> 工具 -> 外部工具

File -> Settings -> Tools -> External Tools

创建工具

  • 名称:Black
  • 描述:毫不妥协的 Python 代码格式化工具
  • 程序:「上一小节得到的安装位置」
  • 参数:$FilePath$
  • 工作目录:$ProjectFileDir$

 

 
















如果需要自定义其他选项,写在 $FilePath$ 前即可,比如代表「取消格式化字符串为双引号包裹”」的选项 -S

使用

在已经打开的代码编辑界面(或项目文件树的某个目录上)鼠标右键,找到 External Tools -> Black,点击即可。

设置快捷键

还可以在 设置 -> 键盘映射 -> 外部工具 -> Black 上右键,打开编辑快捷键的菜单,添加键盘快捷键:

如果已经习惯了 PyCharm 默认的Ctrl + Alt + L 快捷键格式化代码,那么可以这样设置:

1、在 主菜单 -> 代码 -> 重新格式化代码 中删去快捷键

2、给 外部工具 -> External Tools -> Black 设置键盘快捷键Ctrl + Alt + L

自动格式化(可选)

1、确保已经安装了 File Watchers 插件

2、进入 设置 -> 工具 -> File Watchers,点击 + 以添加一个新的 watcher:

  • Name: Black
  • File type: Python
  • Scope: Project Files
  • Program: 上一小节得到的安装位置
  • Arguments: $FilePath$
  • Output paths to refresh: $FilePath$
  • Working directory: $ProjectFileDir$

3、在高级选项中:

  • 取消勾选 “Auto-save edited files to trigger the watcher”
  • 取消勾选 “Trigger the watcher on external changes”
 

使用 isort 对导入的模块排序

摘自:http://zhengxin.qingdengedu.com/posts/pycharm/03isort.html

isort 是一个实用的 Python 程序/库,用于按照顺序对导入进行排序表,并自动类型(标准库/附带库/自己的模块/……)类别部分。它为各种编辑器提供库和其他插件程序、Python快速对导入示例。

 来看官网提供的例子:

 

# Before isort
from my_lib import Object

import os

from my_lib import Object3

from my_lib import Object2

import sys

from third_party import lib15, lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8, lib9, lib10, lib11, lib12, lib13, lib14

import sys

from __future__ import absolute_import

from third_party import lib3

print("Hey")
print("yo")

使用 是 或 t 后 :

 

# After isort
from __future__ import absolute_import

import os
import sys

from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
                         lib9, lib10, lib11, lib12, lib13, lib14, lib15)

from my_lib import Object, Object2, Object3

print("Hey")
print("yo")

导入部分清晰、有条理了许多。

 

安装:

 安装非常简单,只需

pip install isort

安装 isort 并支持 requirements.txt :

pip install isort[requirements_deprecated_finder]

简单实用

在特定文件上运行:

isort mypythonfile.py mypythonfile2.py

地面使用:

isort .

如果开启了globstar,则isort .等价于:

isort **/*.py

查看等式将仅发生的变化,但不适用:

isort mypythonfile.py --diff

以原子方式对项目运行等,只是在不引入语法错误的情况下应用更改:

isort --atomic .

(注意:默认情况下这是禁止的,因为它可以阻止或反对使用不同版本的 Python 编写的代码运行。)

 

在 Python 内使用

import isort

isort.file("pythonfile.py")

或者

import isort

sorted_code = isort.code("import b\nimport a\n")

更多信息可参见本文Python API一节。

 

标签:git,--,black,Python,全栈,大型项目,isort,import,结构
From: https://www.cnblogs.com/WitterWu/p/16849563.html

相关文章

  • (未完成)结构化查询语言SQL
    结构化查询语言SQLSQL语法特点非过程化:用户不需要了解SQL的具体操作方法,通过SQL描述想要获取的结果集合的条件,结果如何取得是由数据库查询优化系统负责具体的执行简......
  • cpp基础之二-结构体structure
    数组必须是同一类型type的集合,而结构体则是不同类型type的集合,类似python中的数组结构体的定义//长方形结构体structRectangle{intlength;intwi......
  • 结构化需求建模
     首先确定一个目标:模型的作用:简化问题、抽象描述问题、只管描述问题。软件模型有:领域模型、需求模型、设计模型、实现模型、测试模型软件模型的作用(1)软件模型是......
  • 软件需求与分析课堂测试09 –结构化建模分析
    阅读下列材料,完成问题:住户到一门市办理业务,若进户及更户要求,可在一门市直接办理,以更新物业管理基本信息,其他业务需求要制作管理签报,连同各种相关材料送管理处处理;管理处3......
  • 数据结构 树的存储结构及代码实现
    7.3、二叉树的存储结构二叉树的顺序存储完全二叉树,实现一些基本操作,如果不是完全二叉树最好使用链表#include<stdio.h>#include<stdlib.h>#include<math.h>#defin......
  • 数据结构 树的遍历代码实现
    7.5、二叉树的遍历先序遍历:根左右(NLR)中序遍历:左根右(LNR)后序遍历:左右根(LRN)层次遍历:一层从左到右遍历代码实现//访问结点voidVist(TreeNode*node){pr......
  • 数据结构 线索二叉树及其代码实现
    7.6、线索二叉树由于二叉树结构中各种遍历(中序、前序、后序、层次)不知道结点的前驱和后继,可以利用那些没有孩子的结点的指针指向它的前驱和后继;没有前驱或者后继就指向NUL......
  • 数据结构 二叉排序树的代码实现
    7.8、二叉排序树(BST)二叉排序树又称二叉查找树左子树上所有结点的值都小于根结点的值右子树上所有结点的值都大于根结点的值左子树和右子树又是一颗二叉排序树左子树......
  • 数据结构 平衡二叉树及其代码实现
    7.9、平衡二叉树(BalancedBinaryTree)简称平衡树(AVL树)——树上任一结点的左子树和右子树的高度只差不会超过1结点的平衡因子=左子树高度-右子树高度得到:平衡二叉......
  • 数据结构 玩转数据结构 5-6 递归算法的调试
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13442 1重点关注1.1递归算法的调试打印日志层级调试参考3.1 2课程内......