Red de conocimiento informático - Aprendizaje de programación - Vistas de matraces: funciones de visualización, vistas de clases, planos organizados por métodos

Vistas de matraces: funciones de visualización, vistas de clases, planos organizados por métodos

Resumen: Flask, vista, función de vista, vista de clase, vista de método, decorador, plano

En Flask, el enrutamiento es la asignación entre la URL solicitada por el usuario y la función de vista , el programa que maneja la relación entre las URL y las funciones se llama enrutamiento. Flask busca la URL predefinida en la tabla de enrutamiento según la URL de la solicitud HTTP y encuentra la función de vista correspondiente. Flask compara las URL predefinidas en la tabla de enrutamiento con la URL de la solicitud HTTP para encontrar la función de vista correspondiente. Los resultados de la ejecución de la función de vista se devolverán al servidor.

De forma predeterminada, Flask vincula funciones de vista a URL utilizando el decorador @app.route, que es una función que toma una función y devuelve una nueva función.

Utilice un decorador para vincular la página de función de vista a la URL '/' asociada con la propiedad app.url_map. El resultado de imprimir app.url_map es el siguiente, hay dos reglas de URL, una para el directorio raíz y otra para el directorio estático

Puede agregar un parámetro de punto final al decorador y darle a la URL un nombre, de esta manera, una vez que se usa el parámetro de punto final url_for, el nombre de la función de vista no se puede usar para la inversión, pero se puede usar el nombre de la URL definida.

La salida de url_for('index') es el contenido de la URL en el formato de cadena "/"

También puede usar add_url_rule para vincular la función de vista a la URL sin usar un decorador, el decorador @app.route en realidad llama al método add_url_rule

La función de vista también se puede implementar como una clase. La ventaja de una vista de clase es que admite la herencia, lo que le permite colocar cosas importantes en una clase principal. Las vistas de clase deben registrarse mediante app.add_url_rule(). Las vistas de clase se dividen en vistas de clase estándar y vistas de clase según los métodos de programación

Las vistas de clase estándar tienen métodos de escritura estándar

Para Para usar la vista de clases, debe definir una propiedad en la clase principal que completará las propiedades correspondientes en la clase secundaria.

Utilice la vista de clases para definir un atributo en la clase principal y completar la lógica empresarial en la subclase. Todas las subclases heredan este atributo de la clase principal.

Para las tres subclases Cada subclase. plantilla de definición

Al ver los resultados, las tres URL deben generar el atributo de anuncios de la clase principal. Además, el contenido de cada plantilla en las tres plantillas también debe generarse

<. p> Si la misma función de vista necesita manejar una lógica diferente según el tipo de solicitud, se debe juzgar en la función de vista para determinar si esto es apropiado. Si la misma función de vista necesita manejar una lógica diferente de acuerdo con diferentes métodos de solicitud, el juicio debe realizarse dentro de la función de vista. Esto se puede lograr usando una vista de método. La vista de método usa una clase heredada de flask.views.MethodView. y define una clase con Solicite el método en minúsculas con el mismo nombre para completar el procesamiento lógico.

Edite una página a la que se accede directamente, genere la página de nombre de usuario y contraseña y, después de enviar el formulario, le preguntará si la contraseña es correcta o incorrecta.

Defina el nombre de la URL asociada con el atributo de acción de la etiqueta del formulario en HTML

Si no utiliza la vista de método para implementarlo, debe llamar a request.method dentro del vista normal para determinar si se debe pasar GET, POST para determinar

La esencia de un decorador es una función de Python que acepta una función y devuelve una función. El propósito de las funciones es darle a una función acceso a otras funciones adicionales.

Supongamos que un escenario requiere acceso a la página de detalles de noticias y se implementa mediante una función, pero antes de eso, primero debe iniciar sesión. El inicio de sesión se implementa mediante otra función. las noticias deben pasarse a la función de inicio de sesión, implementada devolviendo una nueva función como lógica general. El proceso de agregar una nueva función a la función de inicio de sesión para navegar por la web es el decorador.

En la salida de la consola, new_func() ejecuta la nueva función, la función básica user_login ejecuta la función recién agregada y el nombre real de la nueva función sigue siendo interno

Si se utiliza un decorador En este momento, llamar directamente a la función decorada puede realizar la conexión con la nueva función de la función base, que se ha realizado automáticamente en el proceso de pasar la función como parámetro

Entre función base y función modificada Todas las funciones envueltas admiten el paso de parámetros

Ver el código fuente de app.route() La función de vista es una función envuelta. route (), la función de vista también está encapsulada internamente. Antes de ejecutar la función original, llame a add_url_rule para vincular la URL, el punto final y la función de vista, y luego devuelva la función original para implementar la lógica empresarial

El propósito del plano es. para implementar la función de vista de cada módulo escrito en diferentes archivos py, importe el módulo de vista de enrutamiento en la vista principal y registre el objeto de plano para reducir el acoplamiento de cada módulo funcional. Utilice flask.Blueprint para definir el objeto de plano. Register_blueprint para registrar un plano.

Implemente la página de inicio, la página de detalles y la página de comparación, importe otras dos páginas funcionales a la página de inicio y escriba los planos Detail.py y compare.py para estas dos páginas funcionales.

Usar app = Blueprint('detail', __name__) define el objeto del blueprint, el detalle es el nombre del blueprint y el nombre del blueprint no se puede repetir. Los nombres de los planos no se pueden repetir. Luego escriba la vista principal main.py, registre el plano anterior en la vista principal, otros nombres de funciones de vista no pueden ser los mismos que el nombre del plano

Ver el efecto

Si url_for es llamado en el script py de blueprint, debe agregar el nombre del blueprint (es decir, antes del nombre) como prefijo, como se muestra a continuación

Si llama a url_for en el script py de blueprint, debe agregar el nombre del plano (es decir, antes del nombre) como prefijo. Como se muestra a continuación