概述
在网络开发中,验证URL是确保数据完整性和预防错误的重要环节。Django提供了内置的工具,使得URL验证变得简单而可靠。利用Django的URLValidator,我们可以在将URL存储到数据库中或在视图和表单中使用它们之前,检查其正确性。
Django的URL验证器
URLValidator 是Django的一个内置工具,用于确保字符串符合标准URL格式。
- 支持 http 和 https 等URL协议。
- 检测格式错误的URL以防止 runtime 错误。
- 可以在模型(Models)中验证用于存储的URL。
- 可以在 forms 中验证用户输入的URL。
- 可以在Python代码中独立使用,进行自定义验证。
在Django中使用URLValidator的步骤
让我们以一个名为 ‘bookstore‘ 的项目为例,其中包含一个名为 ‘mini‘ 的应用。现在,我们来创建一个模型(Model),并将通过视图(View)来创建它的实例。
步骤 1:定义模型
在 mini/models.py: 中:
from django.db import models
class ValidatedURL(models.Model):
url = models.URLField(unique=True)
def __str__(self):
return self.url
在以上的 model.py 中:
- URLField 会自动验证 URL。
- unique=True 确保不会存储重复的 URL。
步骤 2:创建 form.py
在 mini/forms.py 中,创建一个用于提交 URL 的表单:
from django import forms
from django.core.validators import URLValidator
class URLForm(forms.Form):
url = forms.URLField(
label=‘Enter a URL‘,
validators=[URLValidator()],
widget=forms.TextInput(attrs={‘placeholder‘: ‘https://example.com/‘})
)
在以上的 form.py 中:
- URLValidator() 确保字符串遵循标准的 URL 语法。
- widget=forms.TextInput 添加了一个占位符,以提供更好的用户体验。
- 可以独立使用,无需依赖于模型,用于快速验证 URL。
步骤 3:创建视图
在 mini/views.py 中,定义视图以处理 URL 的提交和显示:
from django.shortcuts import render, redirect
from .forms import URLForm
from .models import ValidatedURL
def index(request):
if request.method == ‘POST‘:
form = URLForm(request.POST)
if form.is_valid():
url = form.cleaned_data[‘url‘]
ValidatedURL.objects.create(url=url)
return redirect(‘success‘)
else:
form = URLForm()
return render(request, ‘url_validator_app/index.html‘, {‘form‘: form})
def success(request):
validated_urls = ValidatedURL.objects.all()
return render(request, ‘url_validator_app/success.html‘, {‘validated_urls‘: validated_urls})
在以上的 views.py 中:
- index 视图处理表单显示 (GET) 和 URL 提交 (POST)。
- 有效的 URL 将使用 ValidatedURL 模型保存到数据库中。
- 成功提交后重定向到 success 视图。
- success 视图检索所有已验证的 URL 并在模板中显示它们。
步骤 4:创建模板
模板处理用户交互 – 一个用于提交 URL,另一个用于显示已验证的 URL。
index.html: URL 提交表单
URL Validator
URL Validator
{% csrf_token %}
{{ form.as_p }}
在以上的 index.html 中:
- 显示一个从 URLForm 创建的表单。
- 使用 csrf_token 在 POST 请求期间保障安全。
- 将表单数据提交到 index 视图进行验证。
template/index2.html: 显示已验证的 URL
Validated URLs
Validated URLs
{% for url in validated_urls %}
- {{ url }}
{% empty %}
- No validated URLs yet.
{% endfor %}
Back to validation
在以上的 index2.html 中:
- 遍历存储在数据库中的所有已验证的 URL。
- 以列表格式显示每个 URL。
- 包含一个导航链接以返回验证表单。
步骤 5:配置 URL
为应用程序定义 URL 模式,以将视图与路由连接起来。
在 mini/urls.py: 中:
from django.urls import path
from . import views
urlpatterns = [
path(‘‘, views.index, name=‘index‘),
path(‘success/‘, views.success, name=‘success‘),
]
在以上的 urls.py 中:
- 空的 path