Creating user profile pages in Django

后端 未结 2 1267
伪装坚强ぢ
伪装坚强ぢ 2021-01-31 12:51

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 whic

2条回答
  •  小鲜肉
    小鲜肉 (楼主)
    2021-01-31 13:25

    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!
    

提交回复
热议问题