当前位置:网站首页>Flask项目的完整创建 七牛云与容联云
Flask项目的完整创建 七牛云与容联云
2022-08-02 14:01:00 【czy1206527605】
1. 创建文件夹(或从pycharm直接创建)
在桌面随意创建一个空文件夹
2.下载所需插件
下载命令 pip install -r txt文件名
3.创建启动文件
创建app.py文件,用工厂方法的方式将app封装起来,再创建一个create_app.py文件
create_app
from flask import Flask
from models.models import db
from views.user_bp import user_bp
from flask_cors import CORS
def create_app(config):
flask_app = Flask(__name__)
# 跨域
CORS(flask_app)
# 加载配置项
flask_app.config.from_object(config)
# 初始化数据库 必须在配置项之后
db.init_app(flask_app)
# 挂载蓝图
flask_app.register_blueprint(user_bp)
return flask_app
加载配置项
要再创建settings目录创建config
非载入七牛云容联云版本
# 默认配置项
class DefaultConfig:
SECRET_KEY = "asdaweq"
SQLALCHEMY_DATABASE_URI=""
SQLALCHEMY_TRACK_MODIFICATIONS=False
SQLALCHEMY_ECHO=True
JSON_AS_ASCII=False
# 验证码配置项
SMS_TIME = 5
# 开发阶段配置项(基础自上面的类)
class DevConfig(DefaultConfig):
SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:[email protected]:3306/h2111p7"
载入容联云七牛云版本
settings文件里配置secret.py文件配置容联 七牛
class SecretConfig():
RL_ACC_ID = ""
RL_ACC_TOKEN = ""
RL_APP_ID = ""
RL_TID = "1"
REDIS_HOST = "127.0.0.1"
REDIS_PORT =6379
QINIU_AK = ''
QINIU_SK = ''
QINIU_BUCKET_NAME = ''
QINIU_BASE_URL = ''
在settings目录创建config
from settings.secret import SecretConfig
# 继承自secret中的类
class DefaultConfig(SecretConfig):
SECRET_KEY = "asdaweq"
SQLALCHEMY_DATABASE_URI=""
SQLALCHEMY_TRACK_MODIFICATIONS=False
SQLALCHEMY_ECHO=True
JSON_AS_ASCII=False
SMS_TIME = 5
# 继承上面的类
class DevConfig(DefaultConfig):
SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:[email protected]:3306/h2111p7"
app
# 导入封装的create app
from create_app import create_app
# 导入setting里的配置项
from settings.config import DevConfig
app = create_app(DevConfig)
if __name__ == '__main__':
app.run()
4.创建蓝图
创建views视图下的py文件
from flask import Blueprint,Resource
# 实例化蓝图对象
# url_prefix全局路由地址
user_bp = Blueprint("user_bp",__name__,url_prefix="/users")
# api 路由收集器
api = Api(user_bp)
class UserView(Resource):
def get(self):
pass
api.add_resource(类名,"/路由名")
5.创建模型类
创建一个model目录下的models.py文件
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
db = SQLAlchemy()
class UserModel(db.Model):
uid = db.Column(db.Integer,primary_key=True,autoincrement=True,comment="用户ID")
mobile = db.Column(db.String(11),comment="手机号")
username = db.Column(db.String(32),default="",comment="昵称")
img = db.Column(db.String(200),default="",comment="头像")
reg_time = db.Column(db.DateTime,default=datetime.now,comment="注册时间")
intro = db.Column(db.String(256),default="这个人很懒,什么都没有留下",comment="简介")
status = db.Column(db.Boolean,default=False,comment="true:冻结 false:正常")
根目录创建manage.py文件
from flask_migrate import Migrate,MigrateCommand
from flask_script import Manager
from app import app
from models.models import db
# 1.创建黑窗口
manage = Manager(app)
# 2.实例化迁移类
migrate = Migrate(app,db)
# 3.给黑窗口添加命令
manage.add_command("db",MigrateCommand)
if __name__ == '__main__':
manage.run()
6.JWT 七牛云 容联云的配置
创建utils文件
JwtTool 配置
import time
import jwt # pip install pyjwt
from flask import current_app
class JwtTool():
''' jwt管理 '''
def create(self,payload,ex=3600):
''' 生成jwt :param payload: 载荷 :return: string jwt '''
payload["exp"] = int(time.time())+ ex # 默认有效期1小时
secret_key = current_app.config.get("SECRET_KEY")
token = jwt.encode(payload,secret_key,algorithm="HS256")
return token
def valid(self,token):
''' 校验jwt :param token: JWT :return: 返回payload '''
secret_key = current_app.config.get("SECRET_KEY")
try:
payload = jwt.decode(token, secret_key, algorithms="HS256")
return payload
except Exception as e:
print(e)
return False
if __name__ == '__main__':
from app import app
with app.app_context():
j = JwtTool()
jwt_token = j.create({
"aaa":"bbb"
})
a = j.valid(jwt_token)
print(a)
QiniuTool文件的配置 七牛云上传文件
from qiniu import Auth,put_file
from flask import current_app
class QiniuTool():
def __init__(self):
ak = current_app.config.get("QINIU_AK")
sk = current_app.config.get("QINIU_SK")
self.q = Auth(ak,sk)
self.bucket_name = current_app.config.get("QINIU_BUCKET_NAME")
def upload(self,localfilepath,newfilename):
''' 七牛云上传图片 :param localfilepath: 本地文件地址 :param newfilename: 上传后的文件名 :return: '''
token = self.q.upload_token(self.bucket_name,newfilename,expires=3600)
print(token)
res = put_file(token,newfilename,localfilepath,version='v2')
print(res)
if res[0]['key'] == newfilename:
return newfilename
else:
return False
if __name__ == '__main__':
from app import app
with app.app_context():
QiniuTool().upload("./../static/img/图片.png",'static/img/图片.png')
SmsTools的配置 容联云发送短信
from ronglian_sms_sdk import SmsSDK
from flask import current_app
import json,redis
class SmsTool():
''' 发送短信类 '''
def __init__(self):
accId = current_app.config.get("RL_ACC_ID")
accToken = current_app.config.get("RL_ACC_TOKEN")
appId = current_app.config.get("RL_APP_ID")
self.sdk = SmsSDK(accId,accToken,appId)
host = current_app.config.get("REDIS_HOST")
port = current_app.config.get("REDIS_PORT")
self.rds = redis.Redis(host=host,port=port)
def send(self,phone,code):
''' 发送短信接口 :param phone: 手机号 :param code: 验证码 :return: Bool 发送成功开始失败 '''
tid = current_app.config.get("RL_TID")
t = current_app.config.get("SMS_TIME") # 有效期,从配置文件获取
# 把验证码存入redis里面
key = "sms_%s"%phone
self.rds.set(key,code,ex=t*60)
datas = (code,t)
rs = self.sdk.sendMessage(tid,phone,datas) # 返回的是json字符串
rs_data = json.loads(rs)
if rs_data["statusCode"] == "000000":
return True
return False
# if __name__ == '__main__':
# from app import app
# with app.app_context():
# s = SmsTool()
# s.send("150369602231","6666")
边栏推荐
- 专访|带着问题去学习,Apache DolphinScheduler 王福政
- RHCE第一天作业
- What is the difference between web testing and app testing?
- How to solve 1045 cannot log in to mysql server
- 苏州大学:从 PostgreSQL 到 TDengine
- 线代:已知一个特征向量快速求另外两个与之正交的特征向量
- Configure zabbix auto-discovery and auto-registration.
- 【Tensorflow】AttributeError: module 'keras.backend' has no attribute 'tf'
- logback源码阅读(二)日志打印,自定义appender,encoder,pattern,converter
- The most complete ever!A collection of 47 common terms of "digital transformation", read it in seconds~
猜你喜欢
Kunpeng devkit & boostkit
Sentinel源码(六)ParamFlowSlot热点参数限流
软件测试和硬件测试的区别及概念
Object detection scene SSD-Mobilenetv1-FPN
基于深度学习的图像检索方法!
C语言提高篇(三)
The world's largest Apache open source foundation is how it works?
微信小程序-最近动态滚动实现
【Tensorflow】AttributeError: ‘_TfDeviceCaptureOp‘ object has no attribute ‘_set_device_from_string‘
CVE-2020-27986(Sonarqube敏感信息泄漏) 漏洞修复
随机推荐
网页设计(新手入门)[通俗易懂]
Swagger 的使用
多个驻外使领馆发提醒 事关赴华出行、人身财产安全
【Tensorflow】AttributeError: '_TfDeviceCaptureOp' object has no attribute '_set_device_from_string'
【ONE·Data || Getting Started with Sorting】
未来的金融服务永远不会停歇,牛市仍将继续 2021-05-28
Word | 关于删除分节符(下一页)前面的版式就乱了解决方案
Geoffery Hinton:深度学习的下一个大事件
玉溪卷烟厂通过正确选择时序数据库 轻松应对超万亿行数据
Sentinel源码(一)SentinelResourceAspect
ttl电平与rs232电平转换电路(232电平定义)
关于C#使用DateTime数据的细节
关于Google词向量模型(googlenews-vectors-negative300.bin)的导入问题
Flutter 实现光影变换的立体旋转效果
MySQL数据库设计规范
软件测试和硬件测试的区别及概念
【ONE·Data || 排序入门】
专访|带着问题去学习,Apache DolphinScheduler 王福政
els 长条碰撞变形判断
方舟生存进化淘宝面板服务器是怎么一回事?