O roteamento e o projeto da estrutura do frasco

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/

Insira a descrição da imagem aqui
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)

Insira a descrição da imagem aqui

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})

Insira a descrição da imagem aqui

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 methodsparâ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

  1. Para criar um objeto de blueprint, o
    primeiro parâmetro é o nome do blueprint e
    __name__ é usado para determinar a localização do blueprint
    Insira a descrição da imagem aqui
 user_bp=Blueprint('user',__name__)
  1. 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'
  1. Registre o objeto blueprint no objeto do aplicativo
 app.register_blueprint(user_bp)

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
url_prefix é usado para adicionar um prefixo quando esta rota é correspondida
Insira a descrição da imagem aqui

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__.pyarquivo do pacote Python

--------- project # 工程目录
  |------ main.py # 启动文件
  |------ user  #用户蓝图
  |  |--- __init__.py  # 此处创建蓝图对象
  |  |--- passport.py  
  |  |--- profile.py
  |  |--- ...
  |
  |------ goods # 商品蓝图
  |  |--- __init__.py
  |  |--- ...
  |...

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Cadastre o blueprint,
Insira a descrição da imagem aqui
preste atenção para adicionar a seguinte frase, carregue o conteúdo das views,
Insira a descrição da imagem aqui
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_prefixparâ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_pathalterar 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

  1. Este acesso no Django irá obter todas as informações de roteamento
    Insira a descrição da imagem aqui

  2. for i in
    iterable object A posição do objeto iterável é obtida por cálculo.É bom saber qual objeto percorrer em sua mente.

  3. 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
    Insira a descrição da imagem aqui
    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
    Insira a descrição da imagem aqui
    Insira a descrição da imagem aqui
    só precisa usar a solução cors para o processamento. As ideias são as mesmas

  4. 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.

  5. Preste atenção às três etapas do blueprint: 1. Crie o blueprint 2. Registre a rota do blueprint 3. Registre o blueprint

  6. Insira a descrição da imagem aqui

  7. Insira a descrição da imagem aqui

  8. Insira a descrição da imagem aqui

  9. Insira a descrição da imagem aqui
    10. De acordo com pep8, guie o pacote e coloque o módulo de guia o máximo possível

  10. 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
    Insira a descrição da imagem aqui
    execução no modo de depuração. No modo de depuração, o erro do servidor não exibe informações detalhadas do erro

Acho que você gosta

Origin blog.csdn.net/weixin_43297727/article/details/115249142
Recomendado
Clasificación