在 Django 中创建随机 URL?

Lia*_*iam 5 python database forms django url

我正在创建一个项目,其中:

  1. 用户向表单提交输入
  2. 该数据被输入到数据库中
  3. 生成一个随机 URL(想想 imgur / youtube 样式链接)
  4. 用户被重定向到该随机 URL
  5. 输入数据显示在该随机 URL 上

表格.py

class InputForm(forms.Form):
    user_input = forms.CharField(max_length=50, label="")
    random_url = forms.CharField(initial=uuid.uuid4().hex[:6].upper())
Run Code Online (Sandbox Code Playgroud)

模型.py

class AddToDatabase(models.Model):
    user_input = models.CharField(max_length=50, unique=True)
    random_url = models.CharField(max_length=10, unique=True)
Run Code Online (Sandbox Code Playgroud)

视图.py

def Home(request):
    if request.method == 'POST':
        form = InputForm(request.POST)

        if form.is_valid():
            user_input = request.POST.get('user_input', '')
            random_url = request.POST.get('random_url', '')
            data = AddToDatabase(user_input=user_input, random_url=random_url)
            data.save()

        return render(request, 'index.html', {'form':form})

    else:

        form = InputForm()
        return render(request, 'index.html', {'form':form})
Run Code Online (Sandbox Code Playgroud)

索引.html

<form action="" method="POST">
    {{form}}
    {% csrf_token %}
    <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

我是 Python / Django 的新手,这可能很明显。上面的代码允许用户提交成功添加到数据库的输入。它还生成 6 个随机字符并将其添加到数据库中。

问题是我不知道如何将随机代码转换为 URL 并在提交表单后将用户重定向到那里。

到目前为止,我已经尝试了几种方法,例如添加action="{{ random_url }}"index.html表单中,以及添加url(r'(?P<random_url>\d+)', views.Home, name='home')urls.py

Tha*_*eem 0

模型.py

import uuid

class AddToDatabase(models.Model):
    user_input = models.CharField(max_length=50, unique=True)
    random_url = models.UUIDField(default=uuid.uuid4)
Run Code Online (Sandbox Code Playgroud)

表格.py

from .models import AddToDatabase
class InputForm(forms.ModelForm):

    class Meta:
      model = AddToDatabase
      fields = ["user_input"]
Run Code Online (Sandbox Code Playgroud)

视图.py

from django.shortcuts import redirect

def Home(request):
    form = InputForm()
    if request.method == 'POST':
        form = InputForm(request.POST)

        if form.is_valid():
            form_instance = form.save(commit=False)
            form_instance.save()
            return redirect("form_detail", random_url=form_instance.random_url)
  return render(request, 'index.html', {'form':form})


def form_detail(request, random_url):
    template = "form_detail.html"
    context = {}
    form_detail = get_object_or_404(AddToDatabase, random_url=random_url)
    context["form_detail"] = form_detail
    return render(request, template, context)
Run Code Online (Sandbox Code Playgroud)

urls.py

from . import views

urlpatterns = [

 url(r'^home/$' views.Home, name="home"),
url(r'^form-detail/(?P<random_url>[-\w]+)/$', views.form_detail, name="form_detail")
]
Run Code Online (Sandbox Code Playgroud)

在 form_detail.html 模板中

<div>
  <p> User Input : {{ form_detail.user_input }}</P>
</div>
Run Code Online (Sandbox Code Playgroud)