Enrutamiento de Python (SANIC) -- python campo con python-3.x campo con mvc campo con asynchronous campo con url-routing camp codereview Relacionados El problema

Python (Sanic) Routing


2
vote

problema

Español

Quería explorar cómo puedo asociar las rutas con "controladores" con SANIC como base. Funciona bien, pero "se siente" un poco clunky, pero no puedo poner mi dedo sobre por qué / cómo.

rutas.py - Métodos de controlador devuelto de una ruta dada

  DeepPtr4  

client.py - Ejemplo de definiciones de ruta

  DeepPtr5  

clientcontontroller.py - Ejemplo de controlador

  DeepPtr6  

Original en ingles

I wanted to explore how I can associate routes with "controllers" with Sanic as a base. It works fine but "feels" a bit clunky but I can't put my finger on why/how.

routes.py - Returning controller methods from a given route

from .index import IndexRoutes from .clients import ClientRoutes from Controllers.IndexController import * from Controllers.ClientController import *  CLASSES = [     IndexRoutes,     ClientRoutes ]  def add_routes(app):     routes = get_routes()      for route in routes:         for m in route['methods']:             controller = m['controller']             method = m['method']              app.add_route(                 eval(controller + '.' + method),                 route['prefix'] + m['path'],                 methods=m['request_methods']             )   def get_routes():     routes = []      for c in CLASSES:         methods = getattr(c, 'ROUTE_METHODS')          route = {             'name': getattr(c, 'ROUTE_NAME'),             'methods': [],             'prefix': getattr(c, 'ROUTE_PREFIX')         }          for method in methods:             route['methods'].append(getattr(c, method)())          routes.append(route)      return routes 

client.py - Example of route definitions

class ClientRoutes:     ROUTE_NAME = 'clients'     ROUTE_METHODS = ['index', 'create', 'update', 'single', 'destroy']     ROUTE_PREFIX = 'clients'       def index():         return {             'controller': 'ClientController',             'method': 'index',             'path': '/',             'request_methods': ['GET']         }       def create():         return {             'controller': 'ClientController',             'method': 'create',             'path': '/',             'request_methods': ['POST']         }       def single():         return {             'controller': 'ClientController',             'method': 'single',             'path': '/<id>',             'request_methods': ['GET']         }       def update():         return {             'controller': 'ClientController',             'method': 'update',             'path': '/<id>',             'request_methods': ['PUT']         }       def destroy():         return {             'controller': 'ClientController',             'method': 'destroy',             'path': '/<id>',             'request_methods': ['DELETE']         } 

ClientController.py - Example of controller

from sanic import response from Database.Model import Model from Database.Client import Client from Helpers.transformers import to_dict  class ClientController:      async def index(request):         clients = Model(Client)         return response.json(to_dict(clients.get()))      async def create(request):         data = request.json         try:             if 'name' not in data:                 raise KeyError('Name is required')             else:                 if len(data['name']) < 1:                     raise ValueError('Name is required')         except KeyError as e:             return response.json(str(e), 400)         except ValueError as e:             return response.json(str(e), 400)          client = Model(Client)         return response.json(to_dict(client.save(data))) 
              

Lista de respuestas


Relacionados problema

2  Enrutador MVC bueno, flexible y seguro PHP  ( Good flexible and secure mvc router php ) 
He desarrollado un nuevo enrutador después de haber aprendido mucho de mis intentos anteriores y estaré usando esto en los sitios que hago de ahora en adelant...

4  Asignación de varias variables de la URL de solicitud usando regexes  ( Assigning several variables from request url using regexes ) 
Refactoré un poco de mi código: Resumen: Esta implementación funciona con PSGI / Placa. Obtiene la URL de $env->{PATH_INFO} y asigna una variable difere...

4  Rutas para recordatorios  ( Routes for reminders ) 
Tengo un controlador con solo unas pocas acciones, no en la situación de la totalidad de las 7 acciones tranquilas. Esto es lo que tengo hasta ahora para el e...

1  Solicitar enrutador escrito en Go  ( Request router written in go ) 
Comencé a aprender Idioma y me imaginé escribir otro enrutador de solicitud, ya que lo necesito para mi próximo proyecto Go. Como es lo que es lo primero que ...

5  El enrutador - Despacho después del parseurl  ( The router dispatch after parseurl ) 
Espero que los devs más experimentados aquí puedan ayudarme a mejorar estos métodos. Estoy construyendo un marco de MVC básico para mí (como un proyecto de ap...

5  Métodos de acción del controlador de rieles correspondientes a las páginas web estáticas  ( Rails controller action methods corresponding to static web pages ) 
Uno de mis rieles Controladores está horriblemente superpoblado con un montón de métodos que vinculan a las páginas web estáticas. controlador def adve...

2  Código PHP para la lista negra y reescritura / redirigiendo las URL  ( Php code for blacklisting and rewriting redirecting urls ) 
Nos enfrentamos a un problema donde las URL tenían una "subcarpeta" incorrecta en su URL, por lo que, por ejemplo, por ejemplo. example.com/match1/randomge...

2  Simple Blog usando reaccionar Redux React-Router  ( Simple blog using react redux react router ) 
He implementado la lógica de mi aplicación, pero no estoy seguro de si es una forma adecuada o no. Tarea: cree una aplicación de reacción usando REDUX, Reac...

2  Enrutamiento, navegación y estado en MVC  ( Routing navigation and state in mvc ) 
Estoy intentando refactar mi aplicación usando el paradigma MVC. MI SITIO Muestra gráficos. Las URL son de la forma Profile3 Profile4 Profile5 ...

2  Clase de enrutador en una placa de calderas MVC ligera  ( Router class in a lightweight mvc boilerplate ) 
Estoy tratando de encontrar una clase simple de enrutador. Consideré usar una clase Request class Router { private $uri; private $controller; ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos