Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

323
Views
¿Crear URL aleatorias en Django?

Estoy creando un proyecto donde:

  1. Un usuario envía una entrada en un formulario
  2. Esos datos se ingresan en la base de datos.
  3. Se genera una URL aleatoria (piense en enlaces de estilo imgur / youtube)
  4. El usuario es redirigido a esa URL aleatoria
  5. Los datos de entrada se muestran en esa URL aleatoria

formularios.py

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

modelos.py

 class AddToDatabase(models.Model): user_input = models.CharField(max_length=50, unique=True) random_url = models.CharField(max_length=10, unique=True)

vistas.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})

índice.html

 <form action="" method="POST"> {{form}} {% csrf_token %} <input type="submit"> </form>

Soy nuevo en Python / Django, lo que probablemente sea obvio. El código anterior permite a los usuarios enviar una entrada que se agrega con éxito a la base de datos. También genera 6 caracteres aleatorios y los agrega a la base de datos.

El problema es que no sé cómo convertir ese código aleatorio en una URL y redirigir al usuario allí después de enviar el formulario.

He probado un par de métodos hasta ahora, como agregar action="{{ random_url }}" al formulario index.html , así como agregar url(r'(?P<random_url>\d+)', views.Home, name='home') a urls.py

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Recomendaría usar algo como Hashids para sus URL en lugar de uuid.uuid4()[:6] , pero creo que su problema inmediato está en urls.py :

 url(r'(?P<random_url>\d+)', views.Home, name='home')

Aquí su expresión regular para random_url es \d+ . \d+ coincide con uno o más dígitos decimales , pero los valores generados por uuid.uuid()[:6] no son decimales. Creo que \w encajará mejor.

El otro problema es que views.Home no acepta la "URL aleatoria", por lo que nunca sabe cuál mostrar. Dale un segundo argumento:

 def Home(request, random_url=None):

y luego use random_url dentro de Home para cargar la página correcta de la base de datos. Sospecho que esto debería suceder en una nueva función de vista, pero no tengo claro qué representa cada página, por lo que no puedo recomendarle un buen nombre.

over 4 years ago · Santiago Trujillo Report

0

modelos.py

 import uuid class AddToDatabase(models.Model): user_input = models.CharField(max_length=50, unique=True) random_url = models.UUIDField(default=uuid.uuid4)

formularios.py

 from .models import AddToDatabase class InputForm(forms.ModelForm): class Meta: model = AddToDatabase fields = ["user_input"]

vistas.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)

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

en la plantilla form_detail.html

 <div> <p> User Input : {{ form_detail.user_input }}</P> </div>
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!