Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

325
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda