How to show user profile using Django?

I am new to django and am currently trying to create a website that allows users to log in and view other user profiles. So far, I have managed to allow users to log in, but I cannot figure out how to view other people's profiles.

Each profile uses a username to create a URL for its profile. Currently, if I log in as one user and change the URL of another profile URL, it still displays the current user profile. I want something similar to pinterest where any person, regardless of whether they are logged in or not, can view people's profiles.

Any help would be appreciated!

View

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

Project url

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}), )

App url

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'),
        )

template

{% 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 %}
+4
1
  • URL- project_name/urls.py: :
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)),
]
  • <app_name>/urls.py. :

from.

urlpatterns = [
    url(r'profile/(?P<username>[a-zA-Z0-9]+)$', views.get_user_profile),
]
  1. <app_name>/views.py , username ( ) :
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})
  1. <app_name>/templates/<app_name>/user_profile.html user:
{{ user.username }} 
{{ user.email }}
{{ user.first_name }} 
{{ user.last_name }} 

<app_name> , .

+8

Source: https://habr.com/ru/post/1615985/


All Articles