如何使用 Django 显示用户配置文件? [关闭]

Posted

技术标签:

【中文标题】如何使用 Django 显示用户配置文件? [关闭]【英文标题】:How can I display a user profile using Django? [closed] 【发布时间】:2016-02-16 21:36:02 【问题描述】:

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

每个个人资料都使用用户的用户名为其个人资料创建一个网址。目前,如果我以一个用户身份登录并将 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': "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)

项目地址

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

应用网址

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

模板

% 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】:
    在配置文件夹project_name/urls.py中注册您的应用程序的url: 例如:
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)),
]
    在您的&lt;app_name&gt;/urls.py 中添加一条新路线。 例如:

从 .导入视图

urlpatterns = [
    url(r'profile/(?P<username>[a-zA-Z0-9]+)$', views.get_user_profile),
]
    &lt;app_name&gt;/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)
    &lt;app_name&gt;/templates/&lt;app_name&gt;/user_profile.html中创建一个模板文件来显示user对象:
 user.username  
 user.email 
 user.first_name  
 user.last_name  

&lt;app_name&gt; 替换为您的应用名称,它应该很好。

【讨论】:

感谢您的回复!除了这里和那里的不同名称之外,我的代码几乎完全一样。我似乎仍然有同样的问题。例如,如果我的网站是 www.example.com,而我的用户名是 Oliver。当我转到 www.example.com/oliver 时,我可以在登录后转到我的用户个人资料。虽然我仍然登录,但如果我尝试转到另一个用户个人资料,例如 www.example.com/katie,我似乎仍然可以奥利弗的用户资料。我需要做些什么来确保其他用户数据保留在每个用户个人资料的每个 url 上?我需要以某种方式改变我的观点吗? 在您看来,您必须通过 url profile/(?P&lt;username&gt;[a-zA-Z0-9]+)$ 检索用户名的数据。请将您当前的观点添加到您的问题中 我刚刚上传了我的代码 :-) 希望它现在更有意义 您的代码是好人,它应该可以工作。请也添加您的模板 刚刚上传的模板,目前还很基础!

以上是关于如何使用 Django 显示用户配置文件? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 django-allauth 访问用户名和配置文件

如何使用 Django 在网页中显示 json 详细信息? [关闭]

Django,使用 ModelForm 更新用户配置文件

如何在我的Django模板上删除“未设置密码”以编辑配置文件

使用 django-allauth 时如何自定义用户配置文件

如何使用 Django 的 HTML 表单来编辑用户配置文件的一部分。