template - login django
¿Cómo volver a escribir la URL base en django para agregar el nombre de usuario registrado en la url de todas las páginas en lugar del nombre de la aplicación? (1)
Estoy trabajando en la aplicación django y tengo una URL base de aplicación como la siguiente:
127.0.0.1:8000/myblog/page
donde 127.0.0.1:8000 es url base y myblog es nombre de la aplicación y la página es nombre de la página. Entonces mi requisito es cambiar la URL a algo como esto sin cambiar el código interno de mi aplicación:
127.0.0.1:8000/username/page
Básicamente quiero cambiar el nombre de la aplicación con el nombre de usuario en la URL. He intentado la solución dada en esta pregunta SO. Pero no ayudó mucho.
Puede pasar el nombre de usuario en url
regexp args y obtener el usuario de request
clase de request
:
ver:
def user_page(request, username):
try:
user = User.objects.get(username=username)
except User.DoesNotExists:
raise Http404
# or use shortcut get_object_or_404(User, username=username)
if request.user.username != user.username:
raise Http404
return render(request, ''templates/user_template'', {''user'':user})
urls:
url(r''^(?<username>/w+)/page/$'', views.user_page, name=''user_page'')
Nota: el campo de username
no es una opción válida; si no es único, producirá un error cuando obtenga más de un usuario de User.objects.get()
. Es mejor usar el campo pk
para buscar en la página del usuario.
Pero hay una forma más simple de crear una página de usuario para el usuario de la solicitud. Solo una URL sin argumentos de palabra clave, que datos de respuesta para usuarios autenticados:
ver:
def user_page(request):
user = None
if request.user.is_authenticated():
user = User.objects.get(pk=request.user.pk)
return render(request, ''templates/user_template'', {''user'': user} )
urls:
url(r''^page/$'', views.user_page, name=''user_page'')
Ahora devuelve datos basados en el usuario de la solicitud o None
si el usuario no está autenticado