All Projects → Allen7D → Mini Shop Server

Allen7D / Mini Shop Server

Licence: mit
基于 Flask 框架开发的微信小程序后端项目,用于构建小程序商城后台 (电商相关;rbac权限管理;附带自动生成Swagger 风格的API 文档;可作「Python 项目毕设」;慕课网系列)---- 相关博客链接:🌟

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Mini Shop Server

Safrs
SqlAlchemy Flask-Restful Swagger Json:API OpenAPI
Stars: ✭ 255 (-42.83%)
Mutual labels:  swagger, sqlalchemy, flask
Full Stack
Full stack, modern web application generator. Using Flask, PostgreSQL DB, Docker, Swagger, automatic HTTPS and more.
Stars: ✭ 451 (+1.12%)
Mutual labels:  swagger, sqlalchemy, flask
Go-Gin-Api
基于golang开源框架 gin封装的api框架
Stars: ✭ 42 (-90.58%)
Mutual labels:  swagger, rbac
Blog.core
💖 ASP.NET Core 6.0 全家桶教程,前后端分离后端接口,vue教程姊妹篇,官方文档:
Stars: ✭ 3,542 (+694.17%)
Mutual labels:  swagger, rbac
Flask Sqlacodegen
🍶 Automatic model code generator for SQLAlchemy with Flask support
Stars: ✭ 283 (-36.55%)
Mutual labels:  sqlalchemy, flask
CourseCake
By serving course 📚 data that is more "edible" 🍰 for developers, we hope CourseCake offers a smooth approach to build useful tools for students.
Stars: ✭ 21 (-95.29%)
Mutual labels:  sqlalchemy, restful-api
mathesar
Web application providing an intuitive user experience to databases.
Stars: ✭ 95 (-78.7%)
Mutual labels:  sqlalchemy, restful-api
Nestjs Boilerplate
NestJS Boilerplate 😻(Authentication, TypeORM, Configuration, Swagger)
Stars: ✭ 267 (-40.13%)
Mutual labels:  swagger, restful-api
Flask Api Starter Kit
Start a Flask API in less than 5 minutes
Stars: ✭ 296 (-33.63%)
Mutual labels:  swagger, flask
Flask Appbuilder
Simple and rapid application development framework, built on top of Flask. includes detailed security, auto CRUD generation for your models, google charts and much more. Demo (login with guest/welcome) - http://flaskappbuilder.pythonanywhere.com/
Stars: ✭ 3,603 (+707.85%)
Mutual labels:  flask, rbac
Swagger Play
Stars: ✭ 320 (-28.25%)
Mutual labels:  swagger, restful-api
Moreco
moreco 是一个能够为小、中、大型项目提供最合适架构的一条龙生态系统。满足项目从小型到中型至大型的衍变过程。从编码到监控至运维都满足、且各种功能都插件化,支持插件间的切换。支持Spring Boot、Spring Cloud、Axon 无缝升级
Stars: ✭ 231 (-48.21%)
Mutual labels:  swagger, rbac
Flasgger
Easy OpenAPI specs and Swagger UI for your Flask API
Stars: ✭ 2,825 (+533.41%)
Mutual labels:  swagger, flask
symfony5-jwt-restapi
API for Meeting app development
Stars: ✭ 21 (-95.29%)
Mutual labels:  swagger, restful-api
Flask Restplus
Fully featured framework for fast, easy and documented API development with Flask
Stars: ✭ 2,585 (+479.6%)
Mutual labels:  swagger, flask
Proteus
Lean, mean, and incredibly fast JVM framework for web and microservice development.
Stars: ✭ 178 (-60.09%)
Mutual labels:  swagger, restful-api
Enferno
A Python framework based on Flask microframework, with batteries included, and best practices in mind.
Stars: ✭ 385 (-13.68%)
Mutual labels:  sqlalchemy, flask
Swagger meqa
Auto generate and run tests using swagger/OpenAPI spec, no coding needed
Stars: ✭ 151 (-66.14%)
Mutual labels:  swagger, restful-api
Validator Badge
Validate your Swagger JSON/YAML today!
Stars: ✭ 158 (-64.57%)
Mutual labels:  swagger, restful-api
Jianshu
仿简书nx+nodejs+nestjs6+express+mongodb+angular8+爬虫
Stars: ✭ 296 (-33.63%)
Mutual labels:  swagger, restful-api

mini-shop-server

构建微信小程序(商城)后端
🤜基于 Flask 框架🤛

🎮 互动

QQ交流群:聊天、斗图、学习、交流,伸手党勿进

img img
葬爱代码家族群 林间有风团队官方交流
葬爱家族QQ交流群 林间有风团队官方QQ交流群

✨ 亮点

  • 基于原生的 Flask 构建 RESTful API
  • 更灵活的 API文档生成方式(可带 Token)
  • AOP(面向切面编程)设计,实现 参数校验层 & 异常统一处理层
  • Ubuntu 16.04上 Nginx + Gunicorn + Pipenv部署

🔩 内置

  1. 用户管理:提供用户的相关配置
  2. 权限组(角色)管理:接口权限分配和菜单权限分配
  3. 菜单管理:实现后端配置菜单动态路由,支持多级菜单
  4. 字典管理:维护系统中经常使用的字典数据,如:性别,状态
  5. 参数管理:系统动态配置常用参数,如:分页数,前端主题色等
  6. 通知管理:系统通知&公告信息的发布维护
  7. 日志管理:操作日志和登录日志
  8. 接口文档:根据业务代码自动生成相关的api接口文档(Swagger风格)
  9. 错误码:前后端开发的错误码的约定
  10. 文件管理和上传:文件夹和文件的管理
  11. 文章管理

目录

开发工具

  • Python 3.6(虚拟环境:pipenv)
  • MySQL
  • PyCharm(开发工具)
  • Navicat(数据库可视化管理工具)

开发环境搭建

  • MySQL安装、运行,数据库的导入
  • Python 3.6

MySQL的安装和数据导入

一、安装

$ sudo apt-get install mysql-server

安装过程中,会让你输入密码。
请务必记住密码!
务必记住密码!
记住密码!

查看是否安装成功

$ sudo netstat -tap | grep mysql

二、运行

$ mysql -u root -p # 执行完毕后输入密码
$ mysql -u root -p123456 # 直接输入密码,进入(我的密码是: 123456)

-u 表示选择登陆的用户名, -p 表示登陆的用户密码
上面命令输入之后,会提示输入密码(Enter password)

三、导入

下载 MySQL数据 SQL文件

mysql的每条执行以「分号」结尾

mysql> create database zerd; # 建立数据库(zerd)
mysql> use zerd; # 进入该数据库
mysql> source /home/ubuntu/mini-shop-server/zerd.sql; # 导入「mini-shop-server」目录下的sql文件

Tips: 其他数据库操作

// 1. 获取存在的所有表
show tables; 
// 2. 导入成功,可以直接查询(user表)
mysql> select * from user;
// 3. 删除数据库(zerd库)
mysql> drop database zerd;
// 4. 导出数据库
mysql> 

Python3.6版本的安装

查询本地的python3的版本 $ python3 --version 如果不是python3.6的版本,则如下操作

$ sudo apt-get update 
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:jonathonf/python-3.6 
$ sudo apt-get install python3.6

pipenv的安装

如果还未安装pip3包管理工具,请先执行如下语句
$ sudo apt install python3-pip

安装 pipenv
$ pip3 install pipenv

Tips: 其他 pipenv操作

$ pipenv install flask # 安装指定模块,并写入到 Pipfile中
$ pipenv install flask==1.0.2 # 安装指定版本的模块
$ pipenv uninstall flask # 卸载指定模块
$ pipenv update flask # 更新指定模块
$ pip list # 查看安装列表
$ pipenv graph # 查看安装列表,及其相应的以来
$ pipenv --venv # 虚拟环境信息
$ pipenv --py # Python解释器信息
$ pipenv --rm # 卸载当前虚拟环境
$ exit # 退出当前虚拟环境

本地启动

$ git clone https://github.com/Allen7D/mini-shop-server.git
$ cd mini-shop-server 
$ mkdir .venv # 生成.venv文件夹,用于存放该项目的python解释器(包括后续所有安装的包依赖)
$ pipenv --python 3.6 # 指定某 Python 版本创建环境
$ pipenv shell # 激活虚拟环境 or 如果没有虚拟环境,则构建新的(默认版本)
$ pipenv install # 安装包依赖
$ python server.py run # 启动方式1:默认5000端口
$ python server.py run -p 8080 # 启动方式2:改为8080端口
$ python server.py run -h 0.0.0.0 -p 8080 # 启动方式3:以本地IP地址访问

生成临时管理员信息

$ python fake.py

Pycharm的配置[1]

Pycharm中 配置 Pipenv生成的虚拟环境,并使用 指定端口 开启「Debug模式」

  1. 获取该虚拟环境下 Python的解释器的路径
img
  1. 配置指定端口号 Run > Edit Configurations
    写入 run -h 0.0.0.0 8080
    等同于,在终端执行 python server.py run -h 0.0.0.0 -p 8080
img
  1. 开启 Debug Run > Debug 'server'

目录结构

展开查看

.
├── app
│   ├── __init__.py
│   ├── api
│   │   ├── v1 # v1的API接口
│   │   │   ├── __init__.py
│   │   │   ├── address.py # 用户地址
│   │   │   ├── banner.py # 推广横幅
│   │   │   ├── category.py # 分类
│   │   │   ├── client.py
│   │   │   ├── order.py # 订单
│   │   │   ├── pay.py # 支付
│   │   │   ├── product.py # 产品
│   │   │   ├── theme.py # 主题
│   │   │   ├── token.py # 令牌
│   │   │   └── user.py # 用户
│   │   └── v2 # v2的API接口
│   │       ├── __init__.py
│   │       └── file.py # 文件上传
│   ├── api_docs # 对应的 API文档
│   │   ├── __init__.py
│   │   ├── address.py
│   │   ├── banner.py
│   │   ├── base.py
│   │   ├── category.py
│   │   ├── client.py
│   │   ├── file.py
│   │   ├── order.py
│   │   ├── pay.py
│   │   ├── product.py
│   │   ├── theme.py
│   │   ├── token.py
│   │   └── user.py
│   ├── config # 配置文件
│   │   ├── secure.py
│   │   ├── setting.py
│   │   └── wx.py
│   ├── libs # 自己的库
│   │   ├── enums.py
│   │   ├── error.py
│   │   ├── error_code.py
│   │   ├── httper.py
│   │   ├── limiter.py
│   │   ├── redprint.py
│   │   ├── scope.py
│   │   ├── swagger_filed.py
│   │   ├── token_auth.py
│   │   └── utils.py
│   ├── models # Model 层
│   │   ├── __init__.py
│   │   ├── banner_item.py
│   │   ├── banner.py
│   │   ├── base.py
│   │   ├── category.py
│   │   ├── image.py
│   │   ├── m2m.py
│   │   ├── order.py
│   │   ├── product.py
│   │   ├── theme.py
│   │   ├── user.py
│   │   └── user_address.py
│   ├── service # Service 层
│   │   ├── __init__.py
│   │   ├── app_token.py
│   │   ├── order.py
│   │   ├── pay.py
│   │   ├── token.py
│   │   └── wx_token.py
│   ├── validators # 参数校验层
│   │   ├── __init__.py
│   │   ├── base.py
│   │   ├── forms.py
│   │   └── params.py
│   ├── web # 网页文件
│   │   ├── __init__.py
│   │   └── auth.py
│   └── app.py
├── fake.py # 生成临时用户
├── server.py # 启动程序(项目入口)
├── config.ini
├── Pipfile # 包依赖文件
├── Pipfile.lock
├── code.md # 错误码(用于前后端开发)
├── README.md # 项目说明文档
├── zerd.sql
└── LICENSE

开发思路

业务逻辑主要放在 Model 层

img

项目架构体系

业务逻辑分成

DAO层(数据访问层),全称为data access object
属于一种比较底层,比较基础的操作,对于数据库的操作,具体到对于某个表的增删改查。
DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。

Service层(服务层)
是对一个或多个DAO进行的再次封装,封装成一个服务,因此不只是一个原子操作,需要事务控制。

Controller层(业务层)
管理用户的操作,用户界面传过的请求,调用对应的服务(service),完成用户请求的处理.

自动生成 api 接口文档

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful风格的 Web 服务。

本项目使用 Flasgger库自动生成 Swagger 风格(Demo)的API文档。

  1. Swagger Editor 在网页端直接编辑 API 文档

查阅 API文档(本项目)

启动服务(DEBUG 模式下)
在浏览器端输入:http://localhost:8080/apidocs/#/

使用 Token

基于 HTTPBasicAuth 来传递token
所以, Postman 中 Authorization 设置使用 Basic Auth;
Flassger 中 securityDefinitions 设置使用 basicAuth (详见config/setting.py)

服务器部署

本项目选择在 Ubuntu 16.04 上,用 Nginx + Gunicorn + Pipenv 部署[3],其中 Gunicorn 取代 uWsgi。

Flask 与 uWsgi 结合有许多难以处理的 bug

运行

gunicorn -w 4 -b 127.0.0.1:8080 server:app # 在8080端口开启 gunicorn
fuser -k 8080/tcp # 关闭占用8080端口的服务

本地&线上同步推进

业务场景

本地与线上的 Swagger API 文档的接口的地址是不同的,但都依赖同一个配置文件 app\config\setting.py
而个人项目有着本地和线上同步,开发和测试同步的需求,会不断修改 app\config\setting.py 文件。

解决

本地线上 自动根据所处的环境变量「ENV_MODE」决定,选择不同的配置文件。

  • 'dev:local'(local development 本地开发环境)
  • 'dev'(development 开发环境 )
  • 'prod'(product 生产环境)
img
  1. PyCharm的状态栏的「Run > Edit Configurations」中编辑环境变量
  2. 设置ENV_MODE=dev:local
  3. 代码

上传&下载

上传[2]

具体查看 app/api/v2/file.pyupload_file 视图函数

下载

1. 「静态资源文件」下载

默认下载路径前缀 http://0.0.0.0:8080/static/ 访问 app/static/images 目录下的资源

http://0.0.0.0:8080/static/images/[email protected]

访问 app/static/files 目录下的资源

http://0.0.0.0:8080/static/files/Python面向对象编程指南.epub

###对第三方库的装饰器的扩展 具体查看 app/lib/redprint.pydoc 函数

不改动第三方库 Flasgger的 swag_from(装饰器函数)的源码,对其进行了功能的扩展

Nginx 部署

$ nginx -s stop # 停止 nginx
$ nginx -s reload # 重启 nginx

Nginx 配置

建立 文件A 快捷方式 文件B : ln –s 源文件A 目标文件B
/etc/nginx/sites-available/server 为源文件,以 /etc/nginx/sites-enabled/server 为目标文件,使得2个文件同步。
ln -s /etc/nginx/sites-available/server /etc/nginx/sites-enabled/server

/etc/nginx/sites-available/server 配置如下:

server {
    listen 443 default;
    server_name www.ivinetrue.com ivinetrue.com; 
    ssl on;
    root html;
    index index.html index.htm;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    ssl_certificate cert/ivinetrue.pem;
    ssl_certificate_key cert/ivinetrue.key;
    ssl_session_timeout 10m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/workspace/mini-shop-server/server.sock;
        # proxy_pass http://127.0.0.1:8080; # 弃用
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_headers_hash_max_size 51200;
        proxy_headers_hash_bucket_size 6400;
    }
    location /static/ {
        alias /home/workspace/mini-shop-server/app/static/; # 静态资源文件路径
    }

}

server {
      listen  80;
      server_name www.ivinetrue.com ivinetrue.com;
      rewrite ^(.*)$  https://$host$1 permanent; # https 代理
}

Nginx 其他配置

Nginx 的公共配置(例如: gzip)需要修改 /etc/nginx/nginx.conf

supervisor 配置

路径 /etc/supervisor/conf.d/server.conf

配置文件

[program:server]
environment=PATH='/root/.local/share/virtualenvs/server-4o3oDD8t/bin/python'
command = /root/.local/share/virtualenvs/server-4o3oDD8t/bin/gunicorn -w 4 -b unix:/home/workspace/morning-star/server/server.sock server:app
directory = /home/workspace/morning-star/server
user = root
#日志输出
stderr_logfile=/tmp/blog_stderr.log
stdout_logfile=/tmp/blog_stdout.log

运行supervisorctl restart server

使用

第一步:

第二步:

第三步:

后续

三端分离

1.客户端: mini-shop-wx

微信小程序n链接

2.服务端: mini-shop-server

基于 Flask框架构建 RESTful API。

点击查阅 API文档(Swagger风格)

3.CMS: mini-shop-cms

基于 Vue.js框架和Element-UI组件库 链接

Python3 学习路线(亲测)

路线: 1 -> 2 -> 3 -> 4

  1. 《全面系统 Python3 入门+进阶课程》
  2. 《Python Flask 高级编程》
  3. 《Python Flask 构建可扩展的 RESTful API》
  4. 《微信小程序商城构建全栈应用》

参考

【1】PyCharm配置使用Flask-Script启动以及开启Debug模式

【2】Flask 上传文件

【3】Flask + Gunicorn + Nginx 部署

【4】centos7 下通过nginx+uwsgi部署django应用

【5】Nginx的https配置记录以及http强制跳转到https的方法梳理

【6】Nginx配置HTTPS

【7】Linux下导入、导出mysql数据库命令的实现方法

【8】Automatically enable HTTPS on your website with EFF's Certbot.

【9】ubuntu16.04 64bit 升级 python3.5 python3.6

【10】Lin-CMS:优秀的 Flask & Vue 结合的前后端分离的 CMS 解决方案

【11】基于Linux环境搭建Nginx+uWSGI+Python框

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].