Marco de Flask- (comprender el marco de Flask y la configuración del proyecto)

Marco de Flask- (comprender el marco de Flask y la configuración del proyecto)

1. Introducción al marco de matraces

Flask es un framework web Python muy popular. Salió en 2010. El autor es ArminRonacher. Originalmente, este proyecto era solo una broma hecha por el autor el día de abril. Más tarde, debido a su popularidad, se convirtió en un proyecto formal.
Desde que se lanzó la primera versión de flask en 2010, ha sido muy popular y amado por los desarrolladores, y se ha utilizado en muchas empresas.Las razones por las que flask es tan popular se pueden dividir en los siguientes puntos:

  • Micro-framework, concisión y solo hacer lo que necesita hacer, lo que proporciona a los desarrolladores una gran escalabilidad.
  • Flask y los complementos correspondientes están muy bien escritos y son muy interesantes de usar.
  • La eficiencia del desarrollo es muy alta, al igual que el uso de ORM de SQLAlchemy para operar la base de datos puede ahorrar a los desarrolladores mucho tiempo escribiendo SQL

Flask es muy flexible, no te ayudará a tomar demasiadas decisiones, puedes hacer cambios según tus
deseos.

  • Al usar Flask para desarrollar una base de datos, ya sea para usar SQLAlchemy o MongoEngine, la elección está completamente en sus manos. A diferencia de Django, Django tiene funciones integradas muy completas y ricas, y si desea reemplazarlo con lo que desea, o no es compatible o es muy problemático.
  • Es muy fácil reemplazar el motor de plantillas Jinija2 predeterminado con otros motores de plantillas.

Introducción al catálogo de matraces:
Introducción al catálogo

2. El primer programa Flask

 # 从flask框架中导⼊Flask类
from flask import Flask

# 传⼊__name__初始化⼀个Flask实例
app = Flask(__name__)


# app.route装饰器映射URL和执⾏的函数。这个设置将根URL映射到了hello_world函数上
@app.route('/')
def hello_world():
	return 'Hello World!'


if __name__ == '__main__':
# 运⾏本项⽬,host=0.0.0.0可以让其他电脑也能访问到该⽹站,port指定访问的端⼝。
默认的host是127.0.0.1,port为5000
app.run(host='0.0.0.0', port=9000)

Luego haga clic en Ejecutar e ingrese http://127.0.0.1:9000 en el navegador para ver hola mundo. Una cosa a tener en cuenta es que app.run solo es adecuado para el desarrollo. Si está en un entorno de producción, debe iniciarse con Gunicorn o uWSGI. Si se está ejecutando en la terminal, puede presionar ctrl + c para detener el servicio.

3. Configuración del proyecto

3-1. Establecer en modo DEBUG

¿Por qué configurar el modo DEBUG?

  • Cuando hay un error en el código, aparecerá directamente en el html para facilitar que los desarrolladores encuentren el error.
  • Después de que se enciende el modo de depuración, el frasco recargará automáticamente el código cada vez que se guarde el código
  • Flask no habilita el modo de depuración de forma predeterminada

Nota: El modo DEBUG solo se puede activar en el entorno de desarrollo, porque el modo DEBUG traerá serios riesgos de seguridad.

Después de activar el modo DEBUG, cuando el programa ingresa al modo de pila de errores con una excepción, y usted hace clic en una pila por primera vez para ver el valor de la variable, aparecerá un cuadro de diálogo que le permitirá ingresar el valor del PIN. El valor del PIN aparecerá cuando lo inicie. Por ejemplo, el valor del PIN en el elemento que acaba de comenzar es 294-745-044. Después de ingresar este valor, Werkzeug guardará el valor del PIN como parte de la cookie. Y expirará a las 8 horas, no es necesario ingresar el valor del PIN dentro de las 8 horas. El propósito de esto es mayor seguridad, lo que dificulta que los atacantes en modo de depuración ataquen este sitio.

3-2. Cuatro formas de abrir el modo DEBUG

3-2-1. Establecer directamente en el objeto de la aplicación

Ejemplo de código:

app.debug = True
app.run()

3-2-2. Al ejecutar el método de ejecución, pase los parámetros en

Ejemplo de código:

app.run(debug=True)

3-2-3. Establecer en el atributo de configuración

Ejemplo de código:

app.config.update(DEBUG=True)

Si todo es normal, se imprimirá la siguiente información en el terminal:

 * Restarting with stat
* Debugger is active!
* Debugger pin code: 294-745-044
* Running on http://0.0.0.0:9000/ (Press CTRL+C to quit)

3-2-4. Configuración en Pycharm Professional Edition

En Pycharm Professional Edition (no se usa en Community Edition), los app.run()cambios en Pycharm no son válidos y la configuración del proyecto debe editarse.
Captura de pantalla de configuración

3-3. Archivo de configuración

Introducción: La configuración del elemento Flask se configura a través del objeto app.config. Si desea configurar un elemento para que esté en modo DEBUG, puede usar app.config ['DEBUG] = True para configurarlo, y luego el elemento Flask se ejecutará en modo DEBUG. En el elemento Frasco, hay cuatro formas de configurar el elemento.

3-3-1. Codificación dura

Ejemplo de código:

app = Flask(__name__)
app.config['DEBUG'] = True

3-3-2. updateMétodo de paso

Debido a que app.config es una instancia de flask.config.Config, y la clase Config hereda de dict, se pueden usar todos los updatemétodos.

Ejemplo de código:

app.config.update(
	DEBUG=True,
	SECRET_KEY='...'
)

3-3-3. app.config.from_object()Cargar módulo personalizado por método

Si tiene muchos elementos de configuración, puede poner todos los elementos de configuración en un módulo y luego configurarlo cargando el módulo. Suponiendo que hay un settings.pymódulo dedicado a almacenar elementos de configuración, este puede app.config.from_object()cargarlo a través del método, y el método puede recibir el nombre de cadena del módulo o el objeto del módulo.

Ejemplo de código:

# 1. 通过模块字符串
app.config.from_object('settings')
# 2. 通过模块对象
import settings
app.config.from_object(settings)

3-3-4. Al app.config.from_pyfile()cargar módulos personalizados

Este método transfiere un nombre de archivo, generalmente .pyel archivo al final, pero no se limita a archivos que solo usan un .pysufijo.

Ejemplo de código:

app.config.from_pyfile('settings.py',silent=True)

4. URL y vista

4-1. URL y mapeo de funciones

Introducción: Del archivo helloworld.py anterior, ya hemos visto que una URL debe mapearse con la función de ejecución, usando un @app.routedecorador. @app.routeEn el decorador, puede especificar reglas de URL para un mapeo más detallado. Por ejemplo, si desea mapear una URL para los detalles del capítulo, la URL para los detalles del capítulo es /article/id/, y la identificación puede ser 1, 2, 3 ..., entonces puedes a través de la siguiente fórmula.

  • cadena: el tipo de datos predeterminado, acepta una cadena sin barras /.
  • int: cirugía plástica.
  • float: tipo de punto flotante.
  • ruta: similar a la cadena, pero puede pasar una barra /.
  • uuid: una cadena de tipo uuid.
  • cualquiera: se pueden especificar varias rutas
  • Ejemplo de código:
@app.route('/<any(article,blog):url_path>/')
def item(url_path):
	return url_path

Si no desea personalizar la subruta para pasar parámetros, también puede pasar los parámetros en la forma tradicional de? =, Por ejemplo: / article? Id = xxx, en este caso, puede request.args.get('id')obtener el valor de id a través de . Si es un método de publicación, puede request.form.get('id')hacerlo pasar.

4-2. Construir URL

Introducción: Generalmente, podemos ejecutar una determinada función a través de una URL. Si al revés, conocemos una función, ¿cómo obtenemos esta URL? La función url_for puede ayudarnos a lograr esta función. La función url_for () recibe dos o más parámetros. Recibe el nombre de la función como primer parámetro y recibe el parámetro nombrado correspondiente a la regla de URL. Si hay otros parámetros, se agregarán al final de la URL como consulta parámetros.

url_for(函数名)Las ventajas:

  1. Si solo se modifica la URL, pero no se modifica el nombre de la función correspondiente a la URL, no es necesario reemplazar la URL en todas partes.
  2. url_for()La función escapará de algunos caracteres especiales y cadenas Unicode, y url_for automáticamente nos ayudará a manejar estas cosas.
    Ejemplo de código:
from flask import Flask,url_for
app = Flask(__name__)

@app.route('/article/<id>/')
def article(id):
	return '%s article detail' % id


@app.route('/')
def index():
	print(url_for("article",id=1))
	return "⾸⻚"

4-3. Especifique la barra al final de la URL

Algunas URL tienen una barra al final y algunas URL no tienen una barra al final. En realidad, son dos URL diferentes.

 @app.route('/article/')
 def articles():
 	return '⽂章列表⻚'

En el ejemplo anterior, cuando visita una URL sin una barra al final: / artículo, será redirigido a la URL con una barra: / artículo /. Pero cuando definimos la URL del artículo, si no hay una barra al final, pero se agrega una barra al acceder, se lanzará una página de error 404:

@app.route("/article")
def articles(request):
	return "⽂章列表⻚⾯"

Lo anterior no agrega una barra al final, por lo que al acceder a / article /, se lanzará un error 404.

4-4. Método HTTP designado

En @app.route()el INICIO ⼀ las palabras clave pueden pasar parámetros para especificar los métodos de los Remedios actuales ⽀ el soporte de Remedios HTTP, por defecto, Use solo la solicitud GET.

Ejemplo de código:

@app.route('/login/',methods=['GET','POST'])
def login():
	return 'login'

Nota: Cuando se especifica methods, solo el método especificado es válido, el GET predeterminado no será válido y se pueden especificar varios métodos de solicitud al mismo tiempo.

4-5. Salto de página y redireccionamiento

Introducción: La redirección se divide en redirección permanente y redirección temporal, la operación reflejada en la página es que el navegador saltará automáticamente de una página a otra. Por ejemplo, el usuario ha accedido a una página que requiere permiso, pero el usuario no ha iniciado sesión actualmente, por lo que debemos redirigirlo a la página de inicio de sesión.

  • Redirección permanente: 301se utiliza principalmente cuando el sitio web antiguo se abandona y necesita ser transferido a un nuevo
    sitio web para garantizar el acceso del usuario. El más clásico es el sitio web de Jingdong. Cuando ingrese a www.jingdong.com, será redirigido a www. jd.com, porque la dirección jingdong.com se ha abandonado y se ha cambiado a jd.com, por lo que en este caso se debe utilizar la redirección permanente.
  • Redirección temporal: 302indica una redirección temporal de la página. En lugar de acceder a una
    dirección que requiere permiso, si el usuario actual no ha iniciado sesión, debe ser redirigido a la página de inicio de sesión. En este caso, se debe utilizar la redirección temporal.

¿Cómo especificar la redirección en Flask?

En flask, la redirección se logra a través de flask.redirect(location,code=302)esta función, lo que locationsignifica que la URL a la que se redireccionará debe usarse junto con la función url_for () mencionada anteriormente. El código indica qué redirección usar, y el valor predeterminado es 302, que es temporal La redirección se puede modificar 301para lograr una redirección permanente.

Ejemplo de código:

from flask import Flask,url_for,redirect

app = Flask(__name__)
app.debug = True


@app.route('/login/',methods=['GET','POST'])
def login():
	return 'login page'


@app.route('/profile/',methods=['GET','POST'])
def profile():
	name = request.args.get('name')
	if not name:
		return redirect(url_for('login'))
	else:
		return name

4-6. Respuesta ( Response)

Valores que se pueden devolver:

  • Objeto de respuesta .
  • Cadena . De hecho, Flask recrea un werkzeug.wrappers.Responseobjeto basado en el tipo de cadena devuelta. Response toma la cadena como el cuerpo, el código de estado es 200 y el tipo MIME es texto / html, y luego devuelve el objeto Response.
  • Tupla . El formato de la tupla es (respuesta, estado, encabezados). La respuesta es una cadena, el valor de estado es el código de estado y los encabezados son algunos encabezados de respuesta.
  • Si no es de los tres tipos anteriores. Luego, Flask se
    Response.force_type(rv,request.environ)convertirá en un objeto de solicitud .

Ejemplo de código 1: crear directamente con Response

# 需要额外导入Rexponse
from werkzeug.wrappers import Response

@app.route('/about/')
def about():
	resp = Response(response='about page',status=200,content_type='text/html;c
harset=utf-8')
	return resp

Ejemplo de código 2: make_responsecreación de funciones

# 需要额外导入make_response
from flask import make_response

@app.route('/about/')
def about():
	return make_response('about page')

Ejemplo de código 3: devolver la forma de tupla

 @app.errorhandler(404)
def not_found():
	return 'not found',404

Supongo que te gusta

Origin blog.csdn.net/weixin_45550881/article/details/105463897
Recomendado
Clasificación