Después de leer este blog, aprenderá la mitad de Python Django

Eraser, un divertido error avanzado de Internet. La nueva serie, entremos juntos al mundo de Django.

Artículo terminado

Cinco, vista de Python Django

5.1 La vista devuelve datos JSON

En el trabajo real, los ingenieros web de Python enviarán comentarios de los datos de la interfaz a los ingenieros de front-end. La interfaz generalmente se llama API. El formato común de los datos devueltos es XML o JSON. A continuación, tomaré los datos en formato JSON más comunes como ejemplo para Explíquele en detalle cómo envía Django datos desde la base de datos al primer plano.

Modifica el views.pyarchivo.

from django.shortcuts import render
# 导入 JSON 格式数据响应类
from django.http import JsonResponse
from .models import Blog

# Create your views here.
def blog_list(request):
    blogs = Blog.objects.all()
    # 用列表生成器生成一个对象
    context = {
    
    
        "data": [{
    
    "id": blog.id, "title": blog.title} for blog in blogs]
    }
    return JsonResponse(context)

En el archivo de encabezado de importación modelsen Blogla clase, luego agregando una nueva blog_listfunción que devuelve JsonResponseel objeto.

5.2 Crear una ruta

Los materiales relacionados con el enrutamiento se complementarán en el futuro. Este blog solo necesita saber cómo devolver diferentes datos a través de diferentes URL.
Cree un nuevo archivo en la carpeta del blog urls.py, el contenido del código es el siguiente:

from django.urls import path
import blog.views as blog_views

urlpatterns = [
    path('list/', blog_views.blog_list)
]

Se completa el código de escritura del archivo, también es necesario modificar my_websitela carpeta en urls.pyel archivo, modificando lo siguiente:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('blog/', include('blog.urls')),
    path('admin/', admin.site.urls),
]

En este punto, la estructura del archivo de su proyecto como se muestra a continuación, es importante tener en cuenta que urls.pyel archivo aparece dos veces.
Después de leer este blog, aprenderá la mitad de Python Django
Ejecute la aplicación actual con el siguiente comando:

python manage.py runserver

El acceso directo http://127.0.0.1:8000/saldrá del siguiente error, que requiere acceso a un directorio. Ingrese el http://127.0.0.1:8000/adminacceso antes de que el fondo del blog involucre la entrada http://127.0.0.1:8000/blog/list/para obtener los datos en formato JSON.
Después de leer este blog, aprenderá la mitad de Python Django
Los datos en formato JSON son los siguientes: el chino ha sido codificado en UNICODE y
Después de leer este blog, aprenderá la mitad de Python Django
también se puede consultar directamente a través de las herramientas de desarrollo, simplemente haga clic en el área rectangular azul en la figura siguiente.
Después de leer este blog, aprenderá la mitad de Python Django
Una vez completada la solicitud, puede continuar con el aprendizaje de repetición.

Accedido a través de la dirección URL, si se accede a la dirección /blog, se cargará automáticamente la urls.pyconfiguración de Django , es decir, los siguientes códigos:

urlpatterns = [
    path('blog/', include('blog.urls')),
    path('admin/', admin.site.urls),
]

La coincidencia se encuentra en la url blog/, luego carga blog.urlsel archivo, el archivo correspondiente al código es el siguiente:

from django.urls import path
import blog.views as blog_views

urlpatterns = [
    path('list/', blog_views.blog_list)
]

Esto contiene un list/comparador, por lo que se blog/list/llama a la blog_view.blog_listfunción de vista , que se usa para devolver datos con formato JSON. Tenga en blog_viewcuenta que el viewcambio de nombre de los módulos importados viene, el código en el encabezado import blog.views as blog_views.

def blog_list(request):
    blogs = Blog.objects.all()
    # 用列表生成器生成一个对象
    context = {
    
    
        "data": [{
    
    "id": blog.id, "title": blog.title} for blog in blogs]
    }
    return JsonResponse(context)

Primero comprenda la relación lógica y luego complemente la definición gramatical profesional.

5.3 Página de detalles ampliados

Con la lógica anterior, después de lograr un retorno a los datos del blog de una sola interfaz, primero edite el views.pyarchivo.

def detail(request, blog_id):
    blog = Blog.objects.get(id=blog_id)

    blog = {
    
    
        "id": blog.id,
        "title": blog.title,
        "content": blog.content,
        "create_time": blog.create_time
    }
    return JsonResponse(blog)

Página de detalles extendida, encontró un error de ortografía, modifique create_timedespués, preste atención al siguiente comando sqlitepara regenerar ser.

> python manage.py makemigrations blog
Did you rename blog.creatr_time to blog.create_time (a DateField)? [y/N] y
Migrations for 'blog':
  blog\migrations\0002_auto_20210329_0940.py
    - Rename field creatr_time on blog to create_time

Una vez finalizado el comando, ejecute el siguiente comando:

>python manage.py migrate blog
Operations to perform:
  Apply all migrations: blog
Running migrations:
  Applying blog.0002_auto_20210329_0940... OK

Continúe modificando el archivo de la blogcarpeta urls.py, el código es el siguiente:

from django.urls import path
import blog.views as blog_views

urlpatterns = [
    path('list/', blog_views.blog_list),
    path('detail/<int:blog_id>', blog_views.detail)
]

Después de completar la preparación del código anterior, puede http://127.0.0.1:8000/blog/detail/1ser una adquisición de datos de un solo blog, formato de dirección URL http://127.0.0.1:8000/blog/detail/{整数序号}.

Número entero en la dirección, se puede blog_idadquirir el fondo , pero se blog_idpasará al detailmétodo.

El código en el que existe una necesidad especial para explicar <int:blog_id>lo anterior intse denomina convertidor de ruta, el convertidor de ruta común tiene lo siguiente:

  • str: Coincide con cualquier cadena no vacía, el valor predeterminado;
  • int: Coincide con cero o entero positivo;
  • uuid: Coincide con un tipo específico de formato de cadena;
  • path: Coincide con cualquier carácter que no esté vacío, puede hacer coincidir la dirección de la ruta, incluida /.

Los siguientes blogs cubrirán el contenido anterior y lo aplicarán primero. Después de todo, la serie de bolas de nieve es una columna de aprendizaje repetido.

5.4 Implementación de paginación

A continuación, continúe con el blog_listmétodo para expandir, deje que implemente la operación de paginación. Concéntrese en views.pylos blog_list(request)métodos para transformar la referencia del código central al siguiente contenido.

from django.shortcuts import render
# 导入 JSON 格式数据响应类
from django.http import JsonResponse
# 导入分页组件
from django.core.paginator import Paginator
from .models import Blog

# Create your views here.
def blog_list(request):
    # blogs = Blog.objects.all()
    # # 用列表生成器生成一个对象
    # context = {
    
    
    #     "data": [{"id": blog.id, "title": blog.title} for blog in blogs]
    # }
    # 页码默认获取 page 参数,默认值为 1
    page = request.GET.get("page", 1)
    # 默认每页 20 条数据
    page_size = request.GET.get("page_size", 20)

    # 获取全部数据
    blog_all = Blog.objects.all()
    # 分页对象
    paginator = Paginator(blog_all, page_size)

    # 当前页码
    current_page = paginator.get_page(page)
    blogs = current_page.object_list

    context = {
    
    
        "blog_list": [{
    
    "id": blog.id, "title": blog.title} for blog in blogs],
        "paginator": {
    
    
            "total_count": paginator.count,
            "num_pages": paginator.num_pages,
            "page_size": paginator.per_page,
            "page_number": current_page.number
        }
    }

    return JsonResponse(context)

Introducida en la parte superior de los from django.core.paginator import Paginatormedios de paginación de código para paginar los datos de contenido subsiguientes mediante el Blog.objects.all()método de adquisición por adelantado, la presente sección modificará la eficiencia de la realización, avanzada al contenido de aprendizaje subsiguiente.

Después de escribir, el efecto de paginación se puede realizar a través de parámetros relacionados con la URL. El http://127.0.0.1:8000/blog/list/?page=1&page_size=1efecto resultante de acceso es el siguiente:
Después de leer este blog, aprenderá la mitad de Python Django

5.5 Resumen de este blog

Este blog se centra en el aprendizaje de vistas en Django. Este artículo se basa en vistas basadas en funciones (FBV). En blogs futuros, aprenderemos sobre vistas basadas en clases (CBV). Las vistas basadas en clases se utilizan ampliamente en el desarrollo real. también son marcos maduros para usar Django para desarrollar API, por ejemplo Django Rest Framework.

Lectura relacionada

  1. 100 tutoriales sobre rastreadores de Python, excelentes tutoriales sobre rastreadores, suscríbase ahora
  2. Python game world (actualizado, el número objetivo de artículos es 50+, suscríbase ahora, todos son viejos fanáticos)
  3. Lección sobre rastreo de Python, 9 lecciones maravillosas

Hoy es el 122º / 200º día de la escritura continua .
Si desea construir un blogger de relación estrecha, puede centrarse en el número público del borrador de sueños del mismo nombre , contacto cercano con un divertido gusano de Internet senior.
ID de Blogger: Dream Eraser, espero que a todos les guste , comente y marque como favorito .

Django WeChat applet mall Django tutorial 2020 PHP es tan genial Django y spring comparan proyectos de código abierto de Django Por qué las grandes empresas rara vez usan el marco Django de vue python Django cómo instalar Django desarrollo empresarial combat pdf

Supongo que te gusta

Origin blog.csdn.net/hihell/article/details/115284224
Recomendado
Clasificación