Prefácio:
Já aprendemos o básico do Django antes. Hoje continuaremos aprendendo o que estamos aprendendo hoje é roteamento de distribuição.
A distribuição de rotas é um conceito central na estrutura da Web. Refere-se ao processo de mapeamento de diferentes solicitações de URL para funções de processamento (visualizações) correspondentes. Em frameworks web como Django, a distribuição de rotas é urls.py
obtida através da configuração de URL (geralmente definida em um arquivo).
1. O que é distribuição de rotas?
-
Definir padrões de URL : No Django, a distribuição de rotas geralmente é obtida definindo uma série de padrões de URL. Esses padrões especificam a estrutura das URLs e quais funções de visualização devem ser chamadas quando essas URLs são acessadas.
-
Mapeamento para visualizações : cada padrão de URL está associado a uma função ou classe de visualização. Quando uma URL solicitada corresponde a um padrão, o Django chama a função de visualização associada a ela para tratar a solicitação.
-
Distribuindo solicitações : O objetivo da distribuição de rotas é distribuir a solicitação do usuário para a função de visualização correta. Este processo é dinâmico e determinado com base na URL solicitada.
-
Organize URLs : a distribuição de rotas ajuda a organizar a estrutura de URLs do seu projeto, tornando-a clara e fácil de manter. Ao mapear URLs para visualizações, os desenvolvedores podem criar aplicativos da web logicamente claros.
2. Distribuição de rotas no Django
No Django, a distribuição de rotas é alcançada através das seguintes etapas:
-
Configuração de URL raiz : No diretório raiz do projeto, geralmente há um
urls.py
arquivo que contém a configuração de roteamento principal do projeto. -
Contém roteamento de aplicativos : no
urls.py
arquivo raiz, você pode usarinclude()
funções para distribuir solicitações para diferentes aplicativos. Isso permite que cada aplicação tenha sua própria configuração de roteamento, tornando a estrutura do projeto mais modular. -
Configuração de URL do aplicativo : cada aplicativo pode ter seu próprio
urls.py
arquivo que define as regras de roteamento do aplicativo. -
Expressões regulares e expressões de caminho : o Django permite definir padrões de URL usando expressões regulares (via
re_path()
funções) ou expressões de caminho (via funções).path()
-
Rotas nomeadas : as rotas podem ser nomeadas para que possam ser facilmente referenciadas em modelos e visualizações.
-
Redirecionar : a distribuição de rotas também pode ser usada para implementar o redirecionamento de URL.
2.1 Configuração de roteamento em nível de aplicativo
Cada aplicação Django pode ter um urls.py
arquivo, que é usado para definir a configuração de roteamento da aplicação.
# UrlApp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index),
]
Neste exemplo, UrlApp
é o nome de um aplicativo e views
o módulo desse aplicativo que define a visualização. urlpatterns
É uma lista que contém todas as regras de roteamento do aplicativo. Cada regra de roteamento path()
é definida usando uma função, que aceita um padrão de URL e uma função de visualização.
2.2 Rota de distribuição dos projetos
No urls.py
arquivo raiz do projeto, você pode distribuir solicitações para diferentes aplicações. Isto é include()
conseguido usando funções.
# 项目的根目录 urls.py
from django.urls import path, include
urlpatterns = [
path('urlapp/', include('UrlApp.urls')),
path('urlapp2/', include('UrlApp2.urls')),
]
A função aqui include()
é usada para incluir outro módulo de configuração de URL. Quando o Django trata uma solicitação, ele olha a lista urls.py
na raiz urlpatterns
. Se uma rota correspondente for encontrada, ela distribuirá ainda mais a solicitação para a configuração de roteamento do aplicativo especificada.
-
path('urlapp/', include('UrlApp.urls'))
: Esta linha de código define uma regra de roteamento quando um usuário a acessa/urlapp/
, o Django irá procurar o arquivoUrlApp
no aplicativourls.py
e usá-lourlpatterns
para processar ainda mais a solicitação. -
path('urlapp2/', include('UrlApp2.urls'))
: Novamente, esta linha de códigoUrlApp2
define um prefixo de roteamento para o aplicativo/urlapp2/
. Todos os URLs que começam com este prefixo serão entregues aos arquivosUrlApp2
do aplicativourls.py
para processamento.
2.3 Use expressões regulares para combinar rotas
As funções do Django re_path()
permitem combinar padrões de URL usando expressões regulares.
# 使用正则表达式匹配路由
from django.urls import re_path
from django.http import HttpResponse
from myapp import views
urlpatterns = [
re_path(r'^[A-Za-z]+/$', views.re_view),
]
def re_view(request):
return HttpResponse('这个视图的路由是英文字母响应')
Neste exemplo, a expressão regular r'^[A-Za-z]+/$'
corresponde a qualquer URL que comece e termine com uma ou mais letras do inglês. A parte da letra correspondente é passada para re_view
a função de visualização. Esta é uma representação geral de expressões regulares.
2.4 Passagem de parâmetros de URL
As funções do Django path()
permitem que parâmetros sejam definidos na URL e passados para funções de visualização.
# URL参数传递
from django.urls import path
urlpatterns = [
path('demo/<urldata>/', views.get_url_data),
]
def get_url_data(request, urldata):
return HttpResponse(f'从 URL 中获取到的参数为:{urldata}')
Nesse caso, <urldata>
é um parâmetro de caminho dinâmico, que é substituído pela parte real da URL e passado como parâmetro para get_url_data
a função de visualização.
2.5 Transporte de dados adicionais em mapeamentos de URL
path()
A função or re_path()
pode aceitar um dicionário como terceiro parâmetro, que será passado para a função view como dados adicionais.
urlpatterns = [
path('extra/', views.extra, {'age': 28}),
]
def extra(request, age):
return HttpResponse(f'从 url 映射方法中获取到的附加数据为:{age}')
Neste exemplo, o dicionário {'age': 28}
é passado para extra
a função view.
2.6 Parâmetros padrão
As funções de visualização podem aceitar valores de parâmetros padrão. Se os parâmetros correspondentes não forem fornecidos na URL, os valores padrão serão usados.
urlpatterns = [
path('default/', views.default_data),
path('default/<data>/', views.default_data),
]
def default_data(request, data=369):
return HttpResponse(f'从 URL 中获取到的参数为:{data}')
Neste exemplo, se nenhum data
parâmetro for fornecido na URL, a função de visualização usará o valor padrão 369
.
2.7. Conversor de roteamento
O Django fornece alguns conversores de rotas integrados para converter parâmetros de URL em tipos de dados específicos.
urlpatterns = [
path('int/<int:data>/', views.int_view),
path('str/<str:data>/', views.str_view),
path('path/<path:data>/', views.path_view),
path('slug/<slug:data>/', views.slug_view),
path('uuid/<uuid:data>/', views.uuid_view),
]
def int_view(request, data):
return HttpResponse(f'使用 int 转换器,接收到的数据为:{data}')
def str_view(request, data):
return HttpResponse(f'使用 str 转换器,接收到的数据为:{data}')
def path_view(request, data):
return HttpResponse(f'使用 path 转换器,接收到的数据为:{data}')
def slug_view(request, data):
return HttpResponse(f'使用 slug 转换器,接收到的数据为:{data}')
def uuid_view(request, data):
return HttpResponse(f'使用 uuid 转换器,接收到的数据为:{data}')
int
: corresponde a números inteiros positivos e converte o parâmetro em um tipo inteiro.str
: Corresponde a strings não vazias.path
: corresponde a qualquer string não vazia, incluindo barras.slug
: Corresponde letras, números, sublinhados e travessões.uuid
: corresponde a identificadores universalmente exclusivos (UUIDs).
3. Rota de análise reversa:
O roteamento de análise reversa é um recurso muito útil no Django, que permite construir URLs dinamicamente através do nome da função de visualização (ou seja, o nome do padrão da URL) em vez de codificar diretamente a string da URL. Essa abordagem melhora a capacidade de manutenção e flexibilidade do código, especialmente quando você precisa alterar a estrutura da URL, você só precisa modificar urls.py
o caminho no arquivo em vez de pesquisar e substituir URLs codificados em todo o projeto.
No Django, o roteamento de resolução reversa é uma forma de recuperar URLs dinamicamente que permite referenciar URLs em modelos e visualizações usando nomes legíveis por humanos em vez de caminhos codificados. Essa abordagem melhora a capacidade de manutenção e a legibilidade do código.
3.1 Rotas de análise reversa em modelos HTML
No modelo, você pode usar {% url 'URL的模式名称' 参数 %}
para analisar reversamente a rota.
<body>
反向解析路由<br>
<a href="{% url 'num' %}">点击开奖</a><br>
<a href="{% url 'age' 28 %}">不要点击</a><br>
</body>
Aqui 'num'
estão 'age'
os nomes dos padrões das URLs, que correspondem à configuração da URL da visualização.
3.2 Analisar rotas reversamente na visualização
Na visualização, você pode usar reverse('URL的模式名称')
para obter o URL.
from django.urls import reverse
from django.http import HttpResponse
from django.shortcuts import redirect
def text(request):
return HttpResponse(f'视图解析路由:{reverse("num")}')
def redirect_reverse(request):
return redirect(reverse("num"))
def text_data(request, data):
return HttpResponse(f'视图解析路由:{reverse("age", args=[data])}')
reverse
A função aceita o nome do padrão do URL e uma lista de parâmetros opcional ou dicionário de parâmetros de palavras-chave e retorna o URL correspondente.
3.3Nome do padrão de URL
Em urls.py
, você pode definir um nome de padrão para uma URL atribuindo valores aos parâmetros path
da função .name
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index),
path('html/', views.html_view),
path('number/', views.number, name='num'),
path('age/<data>/', views.data_view, name='age'),
]
3.4.URL namespace do aplicativo
Em projetos grandes, aplicações diferentes podem ter configurações de URL diferentes. Para evitar conflitos de nomes de padrões de URL, o Django permite que você defina um namespace para cada aplicação.
3.5 Definir namespace do aplicativo
Nos arquivos do seu aplicativo urls.py
, você pode definir uma app_name
propriedade para definir o namespace do aplicativo.
app_name = 'urlapp2'
3.6 Usando namespaces de aplicativos em modelos
Ao analisar reversamente uma URL pertencente a um namespace de aplicativo específico em um modelo, você precisa especificar o namespace do aplicativo e o nome padrão da URL.
<body>
<a href="{% url 'urlapp2:num' %}">点击开奖</a><br>
<a href="{% url 'urlapp2:age' 28 %}">不要点击</a><br>
</body>
Aqui 'urlapp2'
está o namespace do aplicativo 'num'
e 'age'
o nome do padrão da URL.
3.7 Usando namespaces de aplicativos em visualizações
Na visualização, você também precisa usar o nome do padrão de URL com o namespace do aplicativo para resolver reversamente o URL.
def text(request):
return HttpResponse(f'视图解析路由:{reverse("urlapp2:num")}')
def redirect_reverse(request):
return redirect(reverse("urlapp2:num"))
def text_data(request, data):
return HttpResponse(f'视图解析路由:{reverse("urlapp2:age", args=[data])}')
O roteamento de resolução reversa é um recurso poderoso do Django que permite construir URLs dinamicamente em vez de codificá-las. Ao definir nomes de esquemas de URL e namespaces de aplicativos, você pode evitar conflitos de URL e tornar seu código mais claro e fácil de manter.
Conclusão:
Hoje vou compartilhar aqui a parte sobre a distribuição de roteamento do Django. Essa distribuição de roteamento é muito importante em todo o framework Django, porque a distribuição de roteamento pode melhorar a flexibilidade e a capacidade de manutenção do seu código. inevitável que haja algumas omissões neste conteúdo sobre distribuição de roteamento. Espero que vocês possam me dar mais apoio. Também agradeço as correções dos chefes, e o editor as aceitará humildemente. É isso para o compartilhamento de hoje. Até a próxima!