flask-第三方组件
flask-script 离线脚本
from flask_demo import create_app
from flask_script import Manager
app = create_app()
manager = Manager(app) @manager.command
def custom(arg):
"""
自定义命令
python manage.py custom 123
:param arg:
:return:
"""
print(arg) @manager.option('-n', '--name', dest='name')
@manager.option('-u', '--url', dest='url')
def cmd(name, url):
"""
自定义命令
执行: python manage.py cmd -n wupeiqi -u http://www.oldboyedu.com
执行: python manage.py cmd --name wupeiqi --url http://www.oldboyedu.com
:param name:
:param url:
:return:
"""
print(name, url) if __name__ == '__main__':
app.run()
manager.run()
scrpit
- 使其具有类似django启动的方式
- Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开;
在控制台执行命令:
python manage.py 命令名 参数1 参数2 ...
flask-sqlalchemy 专属于flask的 alchemy
将sqlalchemy 的engine session Base 操作封装在db 对象,从而使得代码更加简洁
from flask import Flask from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
app.config.from_object('setting.DevelopmentConfig')
from flask_demo.views.account import ac
app.register_blueprint(ac)
db.init_app(app)
db.create_all(app=app) # 初始化创建表
return app
create_app
from sqlalchemy import Column, Integer, String, UniqueConstraint, Index,DateTime,ForeignKey
from flask_demo import db class Users(db.Model):
__tablename__ = 'users'
id = Column(Integer, primary_key=True,autoincrement=True)
name = Column(String(32),nullable=False,unique=True)
model中
离线脚本之操作数据库
"""
Web运行时,flask程序运行起来,用户通过浏览器访问
离线脚本,自定义的一个py文件+使用flask中定义好的功能
""" from flask_demo import db
from flask_demo import create_app
from flask_demo import models app = create_app()
with app.app_context():
# db.drop_all() # 删除数据库
# db.create_all() # 创建数据库
data = db.session.query(models.Users).all() # 查询数据库
print(data)
离线操作数据库
创建orm session 的两种方法
import time
import threading from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine
from db import Users engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/s6", max_overflow=0, pool_size=5)
Session = sessionmaker(bind=engine) def task(arg):
session = Session() obj1 = Users(name="alex1")
session.add(obj1) session.commit() for i in range(10):
t = threading.Thread(target=task, args=(i,))
t.start()
多线程创建
方式二(推荐):
import models
from threading import Thread
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session engine =create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/s8day128db?charset=utf8",pool_size=2,max_overflow=0)
XXXXXX = sessionmaker(bind=engine) session = scoped_session(XXXXXX) def task(): # 1. 原来的session对象 = 执行session.registry()
# 2. 原来session对象.query
data = session.query(models.Classes).all()
print(data)
session.remove() for i in range(10):
t = Thread(target=task)
t.start() flask-session默认也是使用的第二种方式:scoped_session
通过scoped_session
flask-migrate 组件
from flask_migrate import Migrate,MigrateCommand app = create_app()
manager = Manager(app) Migrate(app, db)
"""
# 数据库迁移命名
python manage.py db init
python manage.py db migrate # makemigrations
python manage.py db upgrade # migrate
"""
manager.add_command('db', MigrateCommand)
flask_migrate
flask自定义组件
from flask import request,session,redirect
class Auth(object):
def __init__(self,app=None):
self.app = app
if app:
self.init_app(app)
def init_app(self,app):
app.auth_manager = self
self.app = app
app.before_request(self.check_login)
app.context_processor(self.context_processor)
def check_login(self):
"""
检查用户是否已经登录
:return:
"""
if request.path == '/login':
return
user = session.get('user')
if not user:
return redirect('/login')
def context_processor(self):
user = session.get('user')
return dict(current_user=user)
def login(self,data):
"""
将用户登录信息,放入session
:param data:
:return:
"""
session['user'] = data
def logout(self):
"""
将用户登录信息,放入session
:param data:
:return:
"""
del session['user']
自定义认证组件
@ac.route('/login',methods=['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
else:
user = request.form.get('user')
pwd = request.form.get('pwd')
obj = db.session.query(models.Users).filter(models.Users.name==user,models.Users.pwd==pwd).first()
db.session.remove()
if not obj:
return render_template('login.html',msg='用户名或密码错误')
current_app.auth_manager.login(user)
return redirect('/index')
@ac.route('/logout')
def logout():
current_app.auth_manager.logout()
return redirect('/login')
登录和退出
flask多app离线脚本多app应用
with app01.app_context():
print(current_app)
with app02.app_context():
print(current_app)
print(current_app)
多app离线脚本
- 多app应用(url进行处理和分发)
from flask import Flask
from werkzeug.wsgi import DispatcherMiddleware
from werkzeug.serving import run_simple app01 = Flask('app01')
app02 = Flask('app02') @app01.route('/login')
def login():
return 'app01.login' @app02.route('/index')
def index():
return 'app02.index' dm = DispatcherMiddleware(app01,{
'/app02': app02,
}) if __name__ == '__main__':
run_simple('localhost', 5000,dm)
多app应用
flask的信号blinker
Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为。
pip3 install blinker
request_started = _signals.signal('request-started') # 请求到来前执行
request_finished = _signals.signal('request-finished') # 请求结束后执行
before_render_template = _signals.signal('before-render-template') # 模板渲染前执行
template_rendered = _signals.signal('template-rendered') # 模板渲染后执行
got_request_exception = _signals.signal('got-request-exception') # 请求执行出现异常时执行
request_tearing_down = _signals.signal('request-tearing-down') # 请求执行完毕后自动执行(无论成功与否)
appcontext_tearing_down = _signals.signal('appcontext-tearing-down')# 请求上下文执行完毕后自动执行(无论成功与否)
appcontext_pushed = _signals.signal('appcontext-pushed') # 请求上下文push时执行
appcontext_popped = _signals.signal('appcontext-popped') # 请求上下文pop时执行
message_flashed = _signals.signal('message-flashed') # 调用flask在其中添加数据时,自动触发
内置信号
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask, current_app, flash, render_template
from flask.signals import _signals app = Flask(import_name=__name__) # 自定义信号
xxxxx = _signals.signal('xxxxx') def func(sender, *args, **kwargs):
print(sender) # 自定义信号中注册函数
xxxxx.connect(func) @app.route("/x")
def index():
# 触发信号
xxxxx.send('', k1='v1')
return 'Index' if __name__ == '__main__':
app.run()
自定义信号
flask-第三方组件的更多相关文章
- 4.flask第三方组件
1.flask-session的使用 在flask中,有一个app.session_interface = SecureCookieSessionInterface(),也就是存session,调用o ...
- Flask第三方组件之flask_session
flask默认提供了session, 但是存在以下问题: ① session数据存在客户端, 不安全 ② 大小有限制 ③ 增加了客户端的压力 所以才产生了很多第三方的session机制, 我使用的是f ...
- Flask第三方组件 之 Flask-Session
原生session:交由客户端保管机制,安全性相对较差,优势是一点都不占用服务器空间 Flask-Session: 解决原生session的劣势 安装包 from flask import Flask ...
- Flask第三方工具组件介绍
flask-wtf组件flask-login组件flask-session组件flask-sqlalchemy组件flask-script组件flask-cache组件flask-assets组件fl ...
- 1.7 flask 的组件 wtfroms使用
2019-1-7 17:59:37 还有两天左右flask就结束啦!昨晚逛了一下吾爱破解还有慕课,发现有三个意外项目, Django生鲜项目,flask电影网站项目,vue美团网项目,都保存百度云啦, ...
- flask seesion组件
一.简介 flask中session组件可分为内置的session组件还有第三方flask-session组件,内置的session组件功能单一,而第三方的flask-sessoin可支持re ...
- C#通过第三方组件生成二维码(QR Code)和条形码(Bar Code)
用C#如何生成二维码,我们可以通过现有的第三方dll直接来实现,下面列出几种不同的生成方法: 1):通过QrCodeNet(Gma.QrCodeNet.Encoding.dll)来实现 1.1):首先 ...
- .Net开发笔记(二十)创建一个需要授权的第三方组件
在使用需要授权的软件时,注册付费的目标是软件的使用者,我们开发人员平时用到的一些第三方组件也是需要授权付费的,也就是说,付费者是开发人员,并不是系统(使用了该第三方组件)的最终使用者. 以上两者的区别 ...
- .net开发中常用的第三方组件
.net开发中常用的第三方组件 2013-05-09 09:33:32| 分类: dotnet |举报 |字号 订阅 下载LOFTER 我的照片书 | RSS.NET.dll RSS. ...
- iOS 项目中用到的一些开源库和第三方组件
iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有 ...
随机推荐
- UML for mac
今年苹果公司推出的iPhone4和iPad继续大获成功,国内想在苹果的平台下开发软件赚钱的开发人员越来越多.那么,在苹果的平台下开发软件有哪些UML建模工具可用呢?虽然不如Windows平台下那么多的 ...
- Apache James 发送邮件到外网
在config.xml文件中查找到<dnsserver>然后把默认的<server> 127.0.0.1</server> 改成如下形式:<dnsserver ...
- 制作可以 SSH 登录的 Docker 镜像
Docker使用系列一我们把镜像源改为了阿里云的,方便后续的操作. 执行这个命令就把源地址改为阿里的: curl https://git.oschina.net/feedao/Docker_shell ...
- 中国版Azure支持那些版本号Linux
不在下述列表中的Linux表示尚未经过正式验证,并不意味着不能使用,客户能够通过自行上传镜像文件的方式使用其它Linux版本号,可是不保证是否遇到一些驱动或者兼容问题. 分发 版本号 上次验证时间 驱 ...
- (二)Solr——Solr界面介绍
1. Dashboard 仪表盘,显示了该Solr实例开始启动运行的时间.版本.系统资源.jvm等信息. 2. Logging Solr运行日志信息 3. Cloud Cloud即SolrCloud, ...
- Java教程到处都是,究竟怎样能学好Java?
学习Java如何入门?学习教程要点是什么?如何精通?做好以下这些点,入门更快,掌握Java更轻松. Java必备基础知识 1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EE ...
- 设置SSH编码为中文
http://www.qzz.in/?post=198下面是详细方法: 方法1: vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB18030" ...
- 微信小程序挑一挑辅助
1.窗体 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;usi ...
- java基础讲解12-----Swing
package com.swing; import java.awt.*; import javax.swing.*; public class Swing01 extends JFrame{ /* ...
- unity3d移动及键鼠状态
gameObject的transform属性可以进行位置.旋转.大小的设置 位置:position,Translate(),位置的移动 旋转:rotate 大小:localScale Vector3内 ...