python - tutorial - href django
¿Cómo puedo mostrar un perfil de usuario usando Django? (1)
Soy nuevo en django y actualmente estoy intentando crear un sitio web que permita a los usuarios iniciar sesión y ver otros perfiles de usuarios. Hasta ahora, he logrado que los usuarios inicien sesión pero no puedo encontrar la forma de ver los perfiles de otras personas.
Cada perfil usa el nombre de usuario de los usuarios para crear una url para su perfil. Actualmente, si me registro como un usuario y cambio la URL a otra URL del perfil de los usuarios, aún se muestra el perfil actual de los usuarios. Quiero algo similar a pinterest en el que cualquier persona, ya sea que haya iniciado sesión o no, puede ver los perfiles de las personas.
¡Cualquier ayuda sería apreciada!
Ver
from django.http import HttpResponse
from django.shortcuts import render
from howdidu.forms import UserProfileForm
from howdidu.models import UserProfile
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404
from django.contrib.auth.models import User
def index(request):
context_dict = {''boldmessage'': "I am bold font from the context"}
return render(request, ''howdidu/index.html'', context_dict)
#user profile form
@login_required
def register_profile(request):
profile = UserProfile.objects.get(user=request.user)
if request.method == ''POST'':
form = UserProfileForm(request.POST, request.FILES, instance=profile)
if form.is_valid():
form.save()
return index(request)
else:
print form.errors
else:
form = UserProfileForm()
return render(request, ''howdidu/register_profile.html'', {''form'': form})
#profile page using user name as url
@login_required
def profile_page(request, username):
user = get_object_or_404(User, username=username)
return render(request, ''howdidu/profile.html'', {''profile_user'': user})
URL del proyecto
from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from registration.backends.simple.views import RegistrationView
class MyRegistrationView(RegistrationView): #redirects to home page after registration
def get_success_url(self,request, user):
return ''/register_profile''
urlpatterns = patterns('''',
# Examples:
# url(r''^$'', ''howdidu_project.views.home'', name=''home''),
# url(r''^blog/'', include(''blog.urls'')),
url(r''^admin/'', include(admin.site.urls)),
url(r'''', include(''howdidu.urls'')),
url(r''^accounts/register/$'', MyRegistrationView.as_view(), name=''registration_register''), #redirects to home page after registration
(r''^accounts/'', include(''registration.backends.simple.urls'')),
url(r''^(?P<username>/w+)/'', include(''howdidu.urls'')), #do i need this?
)
# media
if settings.DEBUG:
urlpatterns += patterns(
''django.views.static'',
(r''^media/(?P<path>.*)'',
''serve'',
{''document_root'': settings.MEDIA_ROOT}), )
URL de la aplicación
from django.conf.urls import patterns, url
from howdidu import views
urlpatterns = patterns('''',
url(r''^$'', views.index, name=''index''),
url(r''^register_profile/$'', views.register_profile, name=''register_profile''),
url(r''^(?P<username>/w+)/$'', views.profile_page, name=''user_profile''),
)
modelo
{% extends ''howdidu/base.html'' %}
{% load staticfiles %}
{% block title %}{{ user.username }}{% endblock %}
{% block body_block %}
{% if user.is_authenticated %}
<h1>{{ user.username }} welcome to your profile page</h1>
<img src="{{ user.userprofile.profile_picture.url }}" width = "150" height = "150" />
<h2>{{ user.userprofile.first_name }}</h2>
<h2>{{ user.userprofile.second_name }}</h2>
<h2>{{ user.userprofile.user_country }}</h2>
{% endif %}
{% endblock %}
- Registre las URL de su aplicación en la carpeta de configuración
project_name/urls.py
: por ejemplo:
from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
urlpatterns = [
url(r''^user/'', include(''<app_name>.urls'')),
url(r''^admin/'', include(admin.site.urls)),
]
- Agregue una nueva ruta en su
<app_name>/urls.py
. P.ej :
de . vistas de importación
urlpatterns = [
url(r''profile/(?P<username>[a-zA-Z0-9]+)$'', views.get_user_profile),
]
- Agregue una vista en
<app_name>/views.py
que tome elusername
(nombre de usuario del usuario) para recuperar su información y enviarla a una plantilla, por ejemplo:
from django.shortcuts import render
def get_user_profile(request, username):
user = User.objects.get(username=username)
return render(request, ''<app_name>/user_profile.html'', {"user":user})
- Cree un archivo de plantilla en
<app_name>/templates/<app_name>/user_profile.html
para mostraruser
objeto deuser
:
{{ user.username }}
{{ user.email }}
{{ user.first_name }}
{{ user.last_name }}
Reemplace <app_name>
por el nombre de su aplicación y debería ser bueno.