如何使用Django显示用户个人资料? [英] How can I display a user profile using Django?

查看:310
本文介绍了如何使用Django显示用户个人资料?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是django的新手,目前我正在尝试建立一个允许用户登录并查看其他用户个人资料的网站。到目前为止,我已经设法让用户登录,但是我无法找出如何查看其他人的个人资料。



每个配置文件都使用用户名创建一个url他们的个人资料目前,如果我以一个用户身份登录,并将URL更改为其他用户个人资料URL,那么它仍会显示当前用户个人资料。我想要一些类似于pinterest的东西,无论他们是否登录,都可以查看民众资料。



任何帮助将不胜感激!



查看

  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':我是上下文中的粗体字}}
return render(request, 'howdidu / index.html',context_dict)

#user profile form
@login_required
def register_profile(request):
profile = UserProfile.objects.get( user = request.user)
如果request.method =='POST':
form = UserProfileForm(request.POST,request.FILES,instance = profi
如果form.is_valid():
form.save()
返回索引(请求)
其他:
打印form.errors
其他:
form = UserProfileForm()
return render(request,'howdidu / register_profile.html',{'form':form})

#profile页面使用用户名为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


$ b $从django.contrib导入django.contrib import url
从django.conf导入设置
从django.conf导入设置
从$ d pre $ registration.backends.simple.views import注册表

class MyRegistrationView(RegistrationView):注册后#redirects到主页
def get_success_url(self,request,user):
return / register_profile'

urlpatterns = patterns('',
#示例:
#url(r'^ $','howdidu_project.views.home',name ='home '),
#url(r'^ blog /',include('blog.urls')),

url(r'^ admin /',include(admin.site url)),
url(r'',include('howdidu.urls')),
url(r'^ accounts / register / $',MyRegistrationView.as_view(),name ='registration_register '),#redirects到注册后的首页
(r'^ accounts /',include('registration.backends.simple.urls')),
url(r'^(?P< username> ; \w +)/',include('howdidu.urls')),#do我需要这个?


#media
如果settings.DEBUG:
urlpatterns + =模式(
'django.views.static',
r'^ media /(?P< path>。*)',
'serve',
{'document_root':settings.MEDIA_ROOT}),)

app url

  from django.conf。 url import pattern,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 +)/ $' .profile_page,name ='user_profile'),

模板

  {%extends'howdidu / base.html'%} 

{%load staticfiles%}

{%block title%} {{user.username}} {%endblock%}

{%block body_block%}
{%if user.is_authenticated% }
< h1> {{user.username}}欢迎来到您的个人资料页面< / h1>
< img src ={{user.userprofile.profile_picture.url}}width =150height =150/>
< h2> {{user.userprofile.first_name}}< / h2>
< h2> {{user.userprofile.second_name}}< / h2>
< h2> {{user.userprofile.user_country}}< / h2>
{%endif%}

{%endblock%}


解决方案


  1. 在配置文件夹中注册您的应用程序的URL project_name / urls.py
    例如:



  from django.conf.urls import include,来自django.contrib的url 
导入admin
从django.conf导入设置

urlpatterns = [
url(r'^ user /',include(' app_name> .urls')),
url(r'^ admin /',include(admin.site.urls)),
]




  1. < 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.username}} 
{{user.em ail}}
{{user.first_name}}
{{user.last_name}}

用你的应用程序的名称替换< app_name> 。应该是好的。


I am new to django and I am currently trying to build a website that allows users to sign in and view other users profiles. So far I have managed to let users sign in but I can't work out how to view other peoples profiles.

Each profile uses the users username to create a url for their profile. Currently if I sign in as one user and change the URL to another users profile URL, it still displays the current users profile. I want something similar to pinterest where any person whether they are signed in or not can view peoples 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 %}

解决方案

  1. Register urls of your app in the configuration folder project_name/urls.py : E.g :

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

  1. Add a new route in your <app_name>/urls.py. E.g :

from . import views

urlpatterns = [
    url(r'profile/(?P<username>[a-zA-Z0-9]+)$', views.get_user_profile),
]

  1. Add a view in <app_name>/views.py that take username (username of the user) to retrieve its information and send them into a template E.g :

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. Create a template file in <app_name>/templates/<app_name>/user_profile.htmlto display user object :

{{ user.username }} 
{{ user.email }}
{{ user.first_name }} 
{{ user.last_name }} 

Replace <app_name> by the name of your app and it should be good.

这篇关于如何使用Django显示用户个人资料?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆