如何使一个形式用于重定向用户在Django输入的地址?

问题描述 投票:1回答:2

我对如何制作一个简单的表单感到有些困惑,该表单需要从用户那里获取网站网址输入,然后在单击“提交表单”按钮时进行重定向。我是否应该使用UserCreationForm,如果使用的话,应该使用哪些字段。还是我应该为它创建一个自定义表单。

django
2个回答
1
投票

这里是一个(简化的)示例:

模板:

<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")

0
投票

如果要使用文本字段,则应避免使用表格。使用输入类型的文本创建普通的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的更多信息。>>

© www.soinside.com 2019 - 2024. All rights reserved.