Flask é uma estrutura web pequena, mas muito flexível e pode implementar muitos recursos avançados por meio de várias extensões e personalizações. Aqui estão alguns exemplos e análises:
-
Instalação e configuração básica
Instale o Flask:pip install Flask
Exemplo de aplicação básica:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run()
Análise: Este exemplo cria uma aplicação Flask básica e define uma rota que retorna "Hello, World!" ao acessar a URL raiz ('/').
-
Exemplo de rotas
:@app.route('/greet') def greet(): return 'Hello, Flask User!'
Análise: Este exemplo define uma nova rota "/greet".Quando o usuário acessar esta URL, será retornado "Hello, Flask User!".
-
Funções de visualização
As funções de visualização são definidas com rotas e retornam uma resposta.
Análise: No exemplo anterior, as funçõeshello_world
egreet
são funções de visualização, que retornaram respostas diferentes, respectivamente. -
Exemplo de modelos
:from flask import render_template @app.route('/template') def template(): return render_template('template.html', variable='value')
Análise: Aqui renderizamos um modelo chamado 'template.html' e passamos uma variável
variable
. -
Static Files
Flask adiciona automaticamente rotas estáticas à/static
pasta do aplicativo.
Análise: Coloque arquivos estáticos como CSS e JavaScript na/static
pasta da aplicação e/static/filename
acesse-os através do .
Exemplo de armazenamento:
armazene um arquivo de folha de estilo style.css na pasta estática no diretório do aplicativo Flask.
Exemplo de acesso:
<link rel="stylesheet" href="{
{ url_for('static', filename='style.css') }}">
Análise: Arquivos estáticos (como folhas de estilo, imagens, arquivos JavaScript, etc.) geralmente são armazenados no diretório estático do projeto. Em um modelo ou arquivo HTML, você pode usar url_for('static', filename='filename') para gerar a URL de um arquivo estático.
-
Exemplos de objetos de solicitação e resposta
:from flask import request @app.route('/login', methods=['POST']) def login(): username = request.form['username'] return 'User %s logged in' % username
Análise: Neste exemplo, obtemos o nome de usuário dos dados do formulário da solicitação POST.
-
Exemplo de tratamento de erros
:@app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404
Análise: Este exemplo personaliza a página de erro 404 e retorna um modelo específico.
-
Exemplo de configuração
:app.config['DEBUG'] = True
Análise: Aqui ativamos o modo de depuração do aplicativo Flask.
-
Exemplo de sessões
:from flask import session @app.route('/setuser/<username>') def setuser(username): session['username'] = username return 'User set to %s' % username
Análise: Este exemplo define uma variável de sessão
username
. -
Exemplo de plantas
:from flask import Blueprint mod = Blueprint('mod', __name__) @mod.route('/mod_route') def mod_route(): return 'This is a route in a blueprint'
Análise: Aqui criamos um blueprint e definimos uma rota no blueprint.
-
Exemplo de extensões
(tomando Flask-SQLAlchemy como exemplo):pip install Flask-SQLAlchemy
from flask_sqlalchemy import SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db' db = SQLAlchemy(app)
Análise: Este exemplo mostra como instalar e configurar a extensão Flask-SQLAlchemy.
Sim, a estrutura Flask é simples, mas fornece extensões e ferramentas para construir recursos avançados. Aqui estão alguns exemplos de uso do Flask para implementar recursos avançados: -
Autenticação do usuário
A extensão Flask-Login pode ajudar a lidar com a autenticação do usuário.
Exemplo:
pip install Flask-Login
from flask_login import LoginManager
login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)
Análise: A extensão Flask-Login é usada para lidar com sessões de usuário. A função no exemplo load_user
é uma parte importante do gerenciamento de sessão de usuário. Ela carrega usuários do banco de dados.
- Operações de banco de dados
A extensão Flask-SQLAlchemy pode ajudar nas operações de banco de dados.
Exemplo:
pip install Flask-SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'
db = SQLAlchemy(app)
Análise: O exemplo mostra como configurar a extensão Flask-SQLAlchemy e criar um SQLAlchemy
objeto db
que pode ser utilizado para operar o banco de dados.
A extensão Flask-WTF de tratamento de formulários pode ajudar no processamento de formulários.
Exemplo:
pip install Flask-WTF
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
class LoginForm(FlaskForm):
username = StringField('Username')
password = PasswordField('Password')
Análise: O exemplo usa a extensão Flask-WTF para definir um formulário de login que contém campos de nome de usuário e senha.
- A extensão RESTful API
Flask-RESTful pode ajudar a criar APIs RESTful.
Exemplo:
pip install Flask-RESTful
from flask_restful import Api, Resource
api = Api(app)
class HelloWorld(Resource):
def get(self):
return {
'hello': 'world'}
api.add_resource(HelloWorld, '/api/hello')
Análise: o exemplo usa a extensão Flask-RESTful para criar uma API RESTful simples, que possui um endpoint /api/hello
e retorna uma resposta JSON.
- Upload de arquivo
O próprio Flask suporta upload de arquivo.
Exemplo:
from flask import request
from werkzeug.utils import secure_filename
@app.route('/upload', methods=['POST'])
def upload_file():
f = request.files['file']
f.save(secure_filename(f.filename))
return 'File uploaded successfully'
Análise: Este exemplo mostra como usar o Flask para lidar com uploads de arquivos. O usuário carrega um arquivo por meio de uma solicitação POST e o arquivo é salvo no sistema de arquivos do servidor.
- Registro de erros
O Flask possui suporte integrado para registro de erros e você pode configurar diferentes registradores para registrar informações de erros.
import logging
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler('error.log', maxBytes=10000, backupCount=3)
handler.setLevel(logging.ERROR)
app.logger.addHandler(handler)
Análise: Este exemplo configura um RotatingFileHandler para registrar informações de erro em error.log
um arquivo. O tamanho do arquivo é limitado a 10.000 bytes e 3 backups são retidos.
- Cache
A extensão Flask-Caching pode adicionar funcionalidade de cache ao seu aplicativo.
pip install Flask-Caching
from flask_caching import Cache
cache = Cache(app, config={
'CACHE_TYPE': 'simple'})
@app.route('/cached')
@cache.cached(timeout=50)
def cached_view():
return 'This is a cached view'
Análise: Este exemplo mostra como usar a extensão Flask-Caching para adicionar um cache para uma visualização específica, com um tipo de cache simples e um tempo limite de 50 segundos.
- Fila de tarefas
Usando o Celery, você pode lidar com tarefas em segundo plano no Flask.
pip install celery
from celery import Celery
def make_celery(app):
celery = Celery(
app.import_name,
backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL']
)
celery.conf.update(app.config)
return celery
celery = make_celery(app)
@celery.task
def add(x, y):
return x + y
Análise: Este exemplo mostra como usar o Celery para configurar e definir tarefas em segundo plano em um aplicativo Flask.
- A extensão WebSocket
Flask-SocketIO fornece suporte WebSocket.
pip install flask-socketio
from flask_socketio import SocketIO
socketio = SocketIO(app)
@socketio.on('message')
def handle_message(message):
print('received message: ' + message)
Análise: Este exemplo mostra como usar Flask-SocketIO para processar mensagens WebSocket.
-
Teste de unidade
O Flask possui suporte integrado para testes de unidade e você pode escrever facilmente casos de teste para seu aplicativo.import unittest class MyTestCase(unittest.TestCase): def setUp(self): app.testing = True self.app = app.test_client() def test_hello(self): rv = self.app.get('/') self.assertEqual(rv.data, b'Hello, World!')
-
Internacionalização e localização
O uso da extensão Flask-Babel pode realizar a internacionalização e localização da aplicação.pip install Flask-Babel
from flask_babel import Babel babel = Babel(app) @babel.localeselector def get_locale(): return request.accept_languages.best_match(['zh_CN', 'en_US'])
Análise: Este exemplo mostra como usar a extensão Flask-Babel para implementar a seleção automática de idioma. Aqui, chinês e inglês são definidos.
-
Pesquisa de texto completo
Use a extensão Flask-WhooshAlchemy para adicionar pesquisa de texto completo aos seus modelos SQLAlchemy.pip install Flask-WhooshAlchemy
import flask_whooshalchemy as whooshalchemy class MyModel(db.Model): __searchable__ = ['name'] # 设置搜索字段 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64)) whooshalchemy.whoosh_index(app, MyModel)
Análise: Este exemplo mostra como usar Flask-WhooshAlchemy para adicionar funcionalidade de pesquisa de texto completo a um modelo.
-
Tarefas agendadas
podem ser implementadas no Flask usando APScheduler.pip install APScheduler
from apscheduler.schedulers.background import BackgroundScheduler scheduler = BackgroundScheduler() scheduler.add_job(func=my_task, trigger="interval", seconds=60) scheduler.start()
Análise: Este exemplo mostra como usar APScheduler para adicionar tarefas agendadas em um aplicativo Flask.
-
Geração de documentação de API
Use Flask-RESTPlus ou Flask-RESTx para gerar rapidamente documentação de API.pip install flask-restx
from flask_restx import Api, Resource api = Api(app) @api.route('/api/hello') class HelloWorld(Resource): def get(self): return { 'hello': 'world'}
Análise: Este exemplo mostra como usar Flask-RESTx para criar uma API e gerar documentação automaticamente.
-
Validação gráfica
Use Flask-Captcha para gerar validações gráficas para aplicativos Flask.pip install Flask-Captcha
from flask_captcha import Captcha captcha = Captcha(app)
-
O compartilhamento de recursos entre domínios
usa a extensão Flask-CORS para lidar com o compartilhamento de recursos entre domínios.pip install Flask-CORS
from flask_cors import CORS CORS(app)
-
Envio de e-mail
Use a extensão Flask-Mail para enviar e-mails facilmente.pip install Flask-Mail
from flask_mail import Mail, Message mail = Mail(app) @app.route('/send-mail') def send_mail(): msg = Message("Hello", recipients=["[email protected]"]) mail.send(msg) return 'Mail sent!'
Análise: A extensão Flask-Mail simplifica o processo de envio de emails. Este exemplo mostra como enviar um email simples.
-
Autenticação OAuth
Flask-Dance é uma extensão que implementa autenticação OAuth e oferece suporte a vários provedores.pip install Flask-Dance
from flask_dance.contrib.github import make_github_blueprint, github github_bp = make_github_blueprint(client_id='your_client_id', client_secret='your_secret') app.register_blueprint(github_bp, url_prefix="/github_login")
Análise: Este exemplo mostra como usar Flask-Dance com GitHub para autenticação OAuth.
-
Pagamento online
Ao integrar Stripe, PayPal e outros serviços, o Flask pode implementar funções de pagamento online.pip install stripe
import stripe stripe.api_key = "your_secret_key" @app.route('/pay') def pay(): charge = stripe.Charge.create( amount=2000, currency='usd', description='A Flask Charge', source='tok_visa', ) return 'Paid!'
Análise: Este exemplo mostra como usar a biblioteca Stripe para implementar pagamento online em um aplicativo Flask.
-
Monitoramento de desempenho de aplicativos
Usando serviços como Flask-Talisman ou NewRelic, você pode monitorar o desempenho e a segurança de seu aplicativo Flask.pip install Flask-Talisman
from flask_talisman import Talisman Talisman(app)
Análise: Flask-Talisman adiciona alguns cabeçalhos de segurança HTTP para aumentar a segurança do aplicativo e também pode integrar outros serviços de monitoramento de desempenho e segurança.
-
Processamento de imagens
Através da biblioteca Pillow, o Flask pode implementar funções de processamento de imagens.pip install Pillow
from PIL import Image @app.route('/image') def image(): img = Image.open("example.jpg") img = img.rotate(45) img.save("rotated.jpg") return 'Image processed!'
Análise: Este exemplo mostra como usar a biblioteca Pillow para processar imagens em um aplicativo Flask.
-
Processamento de formulários da Web
Use a extensão Flask-WTF para processar formulários da Web de maneira conveniente.pip install Flask-WTF
from flask_wtf import FlaskForm from wtforms import StringField, SubmitField class MyForm(FlaskForm): name = StringField('Name') submit = SubmitField('Submit')
Análise: Este exemplo mostra como criar um formulário simples usando Flask-WTF.
-
Autenticação e autorização de usuário
A extensão Flask-Security fornece um conjunto completo de soluções para autenticação e autorização de usuário.pip install Flask-Security
from flask_security import Security, SQLAlchemyUserDatastore, UserMixin, RoleMixin class Role(db.Model, RoleMixin): id = db.Column(db.Integer(), primary_key=True) name = db.Column(db.String(80), unique=True) class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) user_datastore = SQLAlchemyUserDatastore(db, User, Role) security = Security(app, user_datastore)
Análise: Este exemplo mostra como usar Flask-Security para autenticação e autorização de usuário.
-
Programação assíncrona
O Flask pode ser usado com bibliotecas assíncronas, como gevent, para implementar IO assíncrona.pip install gevent
from gevent.pywsgi import WSGIServer from flask import Flask app = Flask(__name__) http_server = WSGIServer(('', 5000), app) http_server.serve_forever()
Análise: Este exemplo demonstra como usar a biblioteca gevent para executar um aplicativo Flask para obter processamento assíncrono.
-
Gerenciamento de conteúdo
Usando a extensão Flask-Admin, você pode adicionar rapidamente uma interface de gerenciamento em segundo plano ao seu aplicativo.pip install Flask-Admin
from flask_admin import Admin admin = Admin(app, name='My App', template_mode='bootstrap3')
Análise: Este exemplo mostra como usar o Flask-Admin para criar rapidamente um histórico de gerenciamento.
-
Suporte GraphQL O
Flask pode oferecer suporte à API GraphQL integrando a biblioteca Graphene.pip install graphene
from flask_graphql import GraphQLView from graphene import Schema app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=Schema(), graphiql=True))
Análise: Este exemplo demonstra como integrar a API GraphQL em um aplicativo Flask.
Esses exemplos são apenas a ponta do iceberg. O ecossistema do Flask é muito rico e você pode encontrar bibliotecas e plug-ins que atendem a quase todas as necessidades. Ao mesmo tempo, a documentação e a comunidade do Flask também são muito ativas e são recursos valiosos para aprender e resolver problemas. Claro que para aprender mais a fundo é recomendável consultar a documentação oficial do Flask .