Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

324
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda