Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating user profile pages in Django

I'm a beginner in Django. I need to setup a website, where each user has a profile page. I've seen django admin. The profile page for users, should store some information which can be edited by the user only. Can anyone point me out how that is possible?. Any tutorial links would be really helpful. Also, are there any modules for django, which can be used for setting up user page.

like image 308
jvc Avatar asked Dec 22 '22 02:12

jvc


2 Answers

You would just need to create a view that's available to an authenticated user and return a profile editing form if they're creating a GET request or update the user's profile data if they're creating a POST request.

Most of the work is already done for you because there are generic views for editing models, such as the UpdateView. What you need to expand that with is checking for authenticated users and providing it with the object that you want to provide editing for. That's the view component in the MTV triad that provides the behavior for editing a user's profile--the Profile model will define the user profile and the template will provide the presentation discretely.

So here's some behavior to throw at you as a simple solution:

from django.contrib.auth.decorators import login_required
from django.views.generic.detail import SingleObjectMixin
from django.views.generic import UpdateView
from django.utils.decorators import method_decorator

from myapp.models import Profile


class ProfileObjectMixin(SingleObjectMixin):
    """
    Provides views with the current user's profile.
    """
    model = Profile

    def get_object(self):
        """Return's the current users profile."""
        try:
            return self.request.user.get_profile()
        except Profile.DoesNotExist:
            raise NotImplemented(
                "What if the user doesn't have an associated profile?")

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        """Ensures that only authenticated users can access the view."""
        klass = ProfileObjectMixin
        return super(klass, self).dispatch(request, *args, **kwargs)


class ProfileUpdateView(ProfileObjectMixin, UpdateView):
    """
    A view that displays a form for editing a user's profile.

    Uses a form dynamically created for the `Profile` model and
    the default model's update template.
    """
    pass  # That's All Folks!
like image 117
Filip Dupanović Avatar answered Jan 04 '23 04:01

Filip Dupanović


You can

  • create another Model for storing profile information about user
  • add AUTH_PROFILE_MODULE='yourprofileapp.ProfileModel' to settings.py
  • In profile editing view, allow only logged in users to edit their own profiles

    example:

    @login_required
    def edit_profile(request):
        '''
        edit profile of logged in user i.e request.user
        '''
    
  • You can also make sure that whenever new user is created the user's profile is also created using django's signals

Read about storing additional information about users from django documentation

like image 24
machaku Avatar answered Jan 04 '23 03:01

machaku