我对如何制作一个简单的表单感到有些困惑,该表单需要从用户那里获取网站网址输入,然后在单击“提交表单”按钮时进行重定向。我是否应该使用UserCreationForm,如果使用的话,应该使用哪些字段。还是我应该为它创建一个自定义表单。
这里是一个(简化的)示例:
模板:
<form action="{% url 'my_view' %}" method="POST">
{% csrf_token %}
<input name="url" type="url">
<input type="submit">
</form>
查看:
@login_required
def my_view(request):
if request.method == "POST":
return redirect(request.POST.get("url"))
else:
return render(request, "my_template.html")
如果要使用文本字段,则应避免使用表格。使用输入类型的文本创建普通的HTML表单,然后在后端获取该值。
HTML:mytemplate.html
<form method="post">
{% csrf_token %}
<input type="url" name="url" placeholder="https://example.com" />
<input type="submit" value="Submit" />
</form>
views.py
from django.shortcuts import redirect, render
def redirect_to_url(request):
if request.method == "POST":
url = request.POST.get('url')
return redirect(url)
else:
return render(request, 'mytemplate.html', {})
这是一个非常基本的实现。您还可以验证网址是否存在。
import requests
from django.shortcuts import redirect, render
from django.http import HttpResponse
def redirect_to_url(request):
if request.method == "POST":
url = request.POST.get('url')
resp = requests.get(url)
if resp.status_code == 200: # some other validation and conditions
return redirect(url)
return HttpResponse('Invalid URL')
else:
return render(request, 'mytemplate.html', {})
有关input type url和Django redirect的更多信息。>>