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 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有 ... 
随机推荐
- javaScript Windows相关
			javaScript 关于Windows 1 Windows 对象 <1>全部浏览器都支持 window 对象.它表示浏览器窗体. <2>全部 JavaScript 全局对象. ... 
- Python进阶---python strip() split()函数实战(转)
			先看一个例子: >>> ipaddr = 10.122.19.10 File "", line 1 ipaddr = 10.122.19.10 ^ SyntaxE ... 
- Tomcat日志、项目中的log4j日志、控制台——我的日志最后到底跑哪去了?
			1.Tomcat自带日志功能,即时你的项目中有log4j也不会影响到Tomcat自己记录日志. 2.你的项目中的log4j中的日志指定打印到什么地方(控制台或者文件),便会打印到什么地方,和Tomat ... 
- C# 字符串数组转换为整形数组
			/// <summary> /// 字符串数组转换整形数组 /// </summary> /// <param name="Content">字 ... 
- JBoss类隔离
			http://tiger888.iteye.com/blog/572875这几天,项目组在部署JBOSS时遇到不少问题,都是由于JBOSS的类装载问题引起,特发表一篇BLOG详细说一下JBOSS的类隔 ... 
- HDFS原理解析(整体架构,读写操作流程及源代码查看等)
			前言 HDFS 是一个能够面向大规模数据使用的.可进行扩展的文件存储与传递系统.是一种同意文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间.让实际上是通过网络来訪问文件的 ... 
- memcache基础知识-stats参数
			安装memcache: #tar -xvf libevent-1.4.13-stable.tar.gz#cd libevent-1.4.13-stable#./configure && ... 
- Event-Souring模式
			Event-Sourcing模式使用仅附加存储来记录或描写叙述域中数据所採取的动作,从而记录完整的一系列系列事件,而不是仅存储实体的当前状态.由于存储包括全部的事件,能够用来具体化域对象. Event ... 
- Android ART介绍
			1.ART之所以会比Dalvik快,是由于ART运行的是本地机器指令,而Dalvik运行的是Dex字节码.通过通过解释器运行. 虽然Dalvik也会对频繁运行的代码进行JIT生成本地机器指令来运行,但 ... 
- C# 版 防止 DNS 污染,获取域名真实 IP 地址
			using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Net. ... 
