roteamento
@app.route("/itcast")
def view_func():
return "hello world"
1 Consulta de informações de roteamento
- Linha de comando
flask routes
Endpoint Methods Rule
-------- ------- -----------------------
index GET /
static GET /static/
O Flask fornecerá roteamento para acessar arquivos estáticos por padrão
- Entre no programa
As informações de mapeamento de roteamento de todo o aplicativo Flask são armazenadas no atributo url_map no aplicativo e as informações de roteamento podem ser obtidas lendo este atributo
print(app.url_map)
Se você deseja percorrer as informações de roteamento no programa, você pode usar o seguinte método
for rule in app.url_map.iter_rules():
print('name={} path={}'.format(rule.endpoint, rule.rule))
exigem
Retorne todas as informações de roteamento no aplicativo em formato json por meio de acesso / endereço
alcançar
@app.route('/')
def route_map():
"""
主视图,返回所有视图网址
"""
rules_iterator = app.url_map.iter_rules()
return json.dumps({
rule.endpoint: rule.rule for rule in rules_iterator})
2 Especifique o método de solicitação
No Flask, o método de solicitação padrão para roteamento é definido como:
- OBTER
- OPÇÕES (incluídas) -> solicitação Get simplificada, o usuário pergunta as informações da interface do servidor
- HEAD (incluído) -> solicitação Get simplificada, apenas o cabeçalho de resposta processado pela solicitação get é retornado, não o corpo da resposta
Para a mesma solicitação, usando get retornará todas as informações, usando head, contém apenas o código de status e cabeçalhos de resposta
Use methods
parâmetros para especificar o método de solicitação de uma interface por si mesmo
O atributo de métodos modificará o método de solicitação da rota de uma maneira sobrescrita. A primeira rota abaixo suportará apenas postagem, e a segunda rota suportará apenas obter e postar.
@app.route("/itcast1", methods=["POST"])
def view_func_1():
return "hello world 1"
@app.route("/itcast2", methods=["GET", "POST"])
def view_func_2():
return "hello world 2"
planta
exigem
Em um projeto de aplicativo Flask, se houver muitas visões de negócios, as unidades de negócios divididas de uma determinada maneira podem ser mantidas separadamente e as visões, arquivos estáticos e arquivos de modelo usados por cada unidade podem ser separados independentemente?
Por exemplo, de uma perspectiva de negócios, todo o aplicativo pode ser dividido em unidades de módulo de usuário, unidades de módulo de mercadoria e unidades de módulo de pedido.Como desenvolver essas unidades diferentes separadamente e, finalmente, integrá-las em um aplicativo de projeto?
Como esse requisito é alcançado no Django?
planta
Django é chamado de blueprint, e flask é chamado de subaplicativo. O
blueprint deve incluir os recursos usados por este subaplicativo, tanto quanto possível.
No Flask, o blueprint é usado para organizar e gerenciar os módulos.
Na verdade, um blueprint pode ser entendido como um objeto recipiente que armazena um conjunto de métodos de visualização. Ele tem as seguintes características:
- Um aplicativo pode ter vários Blueprints
- Você pode registrar um Blueprint para qualquer URL não utilizado, como "/ usuário", "/ mercadorias"
- O Blueprint pode ter seus próprios modelos, arquivos estáticos ou outros métodos gerais de operação por si só, não é necessário implementar as visualizações e funções do aplicativo
- Quando um aplicativo é inicializado, ele deve registrar o Blueprint
**, mas um Blueprint não é um aplicativo completo, não pode ser executado independentemente do aplicativo, mas deve ser registrado em um determinado aplicativo. ** Como Django, ele não pode ser executado de forma independente, ele precisa ser registrado em um determinado projeto
Como usar
O uso de projetos pode ser dividido em três etapas
- Para criar um objeto de blueprint, o
primeiro parâmetro é o nome do blueprint e
__name__ é usado para determinar a localização do blueprint
user_bp=Blueprint('user',__name__)
- Operar neste objeto de blueprint, registrar rotas, especificar pastas estáticas e registrar filtros de modelo
@user_bp.route('/')
def user_profile():
return 'user_profile'
- Registre o objeto blueprint no objeto do aplicativo
app.register_blueprint(user_bp)
url_prefix é usado para adicionar um prefixo quando esta rota é correspondida
Projeto de arquivo único
Você pode criar objetos de blueprint e definir visualizações em um arquivo.
Projeto do catálogo (pacote)
As visualizações podem ser colocadas em um único arquivo ou em vários arquivos
Para um blueprint que pretende conter vários arquivos, geralmente a criação do objeto blueprint é colocada no __init__.py
arquivo do pacote Python
--------- project # 工程目录
|------ main.py # 启动文件
|------ user #用户蓝图
| |--- __init__.py # 此处创建蓝图对象
| |--- passport.py
| |--- profile.py
| |--- ...
|
|------ goods # 商品蓝图
| |--- __init__.py
| |--- ...
|...
Cadastre o blueprint,
preste atenção para adicionar a seguinte frase, carregue o conteúdo das views,
esta frase deve ser colocada no final, caso contrário, causará referências circulares.
Uso prolongado
1 Especifique o prefixo de URL do blueprint
Use url_prefix
parâmetros para especificar ao registrar projetos no aplicativo
app.register_blueprint(user_bp, url_prefix='/user')
app.register_blueprint(goods_bp, url_prefix='/goods')
2 arquivos estáticos dentro do blueprint
Ao contrário do objeto de aplicativo, a rota do diretório estático não é registrada por padrão quando o objeto de blueprint é criado. Precisamos especificar o parâmetro static_folder ao criá-lo .
O exemplo a seguir define o diretório static_admin no diretório em que o blueprint está localizado como um diretório estático
admin = Blueprint("admin",__name__,static_folder='static_admin')
app.register_blueprint(admin,url_prefix='/admin')
Agora você pode usar os arquivos estáticos no diretório de /admin/static_admin/<filename>
acesso static_admin
.
Você também pode static_url_path
alterar o caminho de acesso
admin = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib')
app.register_blueprint(admin,url_prefix='/admin')
3 Catálogo de modelo interno do Blueprint
O diretório de modelo padrão do objeto blueprint é o diretório de modelo do sistema. Você pode usar o parâmetro de palavra-chave template_folder para definir o diretório de modelo ao criar o objeto blueprint
admin = Blueprint('admin',__name__,template_folder='my_templates')
notas
-
Este acesso no Django irá obter todas as informações de roteamento
-
for i in
iterable object A posição do objeto iterável é obtida por cálculo.É bom saber qual objeto percorrer em sua mente. -
Como resolver o problema de acesso entre domínios? Django-cors fornece uma solicitação de opções de processamento. No middleware, as opções de solicitação de
opções não envolvem lógica de negócios. Ele apenas pede informações de interface. A fonte da solicitação a ser permitida
só precisa usar a solução cors para o processamento. As ideias são as mesmas -
O objetivo da criação de aplicativos em Django é reutilizar. Desta forma, cada aplicativo pode ser separado do Django. Por exemplo, o módulo de usuário pode ser usado diretamente por outros sites, e o aplicativo pode ser reutilizado e estendido.
-
Preste atenção às três etapas do blueprint: 1. Crie o blueprint 2. Registre a rota do blueprint 3. Registre o blueprint
-
-
-
-
10. De acordo com pep8, guie o pacote e coloque o módulo de guia o máximo possível -
DEBUG no Django suporta arquivos estáticos. Erros no backend serão exibidos diretamente na página front-end. Após modificar o código, o servidor de desenvolvimento será reiniciado automaticamente. O debug do Flask não suporta arquivos estáticos, mas suporta os dois últimos para
execução no modo de depuração. No modo de depuração, o erro do servidor não exibe informações detalhadas do erro