如何让未注册的用户拥有完全访问用户个人资料及其链接的权限?

How to let users who have not signed up have full access to user profile and its links?

我在模板中有以下内容

<div class="profile-navbar">
{% url 'users:profile' user.id as profile_link %}
<a class="item home" href="{{ profile_link }}">Home</a>

{% url 'users:profile_ask' user.id as profile_ask_link %}
<a class="item" href="{{ profile_ask_link }}" > Ask <span class="num">0</span></a>

{% url 'users:profile_answer' user.id  as profile_answer_link %}
<a class="item" href="{{ profile_answer_link }}" > Answer <span class="num">0</span></a>

</div>

网址是

url(r'^profile/(?P<userid>\d+)', views.profile, name='profile'),
url(r'^profile/ask/(?P<userid>\d+)', views.profile_ask, name='profile_ask'),
url(r'^profile/answer/(?P<userid>\d+)', views.profile_answer, name='profile_answer'),

这里是视图函数:

def profile(request,userid):
    if request.user.is_authenticated():
        if request.user.id == userid:
            pass
        else:
            pass
    else:
        pass

    template_name = 'users/profile.html'
    if request.method == 'POST':
         pass
    return render(request, template_name)

如果 he/she 键入 link 但页面(上述模板)中的 link 不起作用,来宾访问者可以访问该页面。 我在这里做错了什么? 谢谢。

您可以采用两种方法(第二种是首选方法):

1.)

<div class="profile-navbar">
    <a class="item home" href="{% url 'profile' user.id %}">Home</a>
    <a class="item" href="{% url 'profile_ask' user.id %}" > Ask <span class="num">0</span></a>
    <a class="item" href="{% url 'profile_answer' user.id %}" > Answer <span class="num">0</span></a>
</div>

2.)

models.py:

# Completely making this up, but you'll get the idea
class Model(models.Model):
    user = models.ForeignKey(User)

    def get_profile_url(self):
        return reverse('profile',
                       kwargs={'userid': self.user.id})

    def get_profile_ask_url(self):
        return reverse('profile_ask',
                       kwargs={'userid': self.user.id})

    def get_profile_answer_url(self):
        return reverse('profile_answer',
                       kwargs={'userid': self.user.id})

html:

<a class="item home" href="{{ request.user.get_profile_url }}">Home</a>
<a class="item" href="{{ request.user.get_profile_ask_url }}"> Ask <span class="num">0</span></a>
<a class="item" href="{{ request.user.get_profile_answer_url }}"> Answer <span class="num">0</span></a>

-

首选第二种方法,因为它现在是通用的。如果需要进行更改,只需在模型中进行即可。如果您按照我展示的第一种方式进行设置,则需要浏览每个模板并进行更改 - 麻烦事。

我想向您展示第一种方法,以便您了解发生了什么,但我强烈建议您遵循第二种方法的格式。

注意:我直接在响应中输入了这个,所以在使用之前确保语法和变量是正确的。您还需要根据您的模型等进行更改。如果您遇到问题,请随时提出问题。

编辑:

此外,将您的网址更改为此(应使用尾部斜杠和美元符号):

# I'm assuming these are extended from a branch?
url(r'^profile/(?P<userid>\d+)/$', 'profile', name='profile'),
url(r'^profile/ask/(?P<userid>\d+)/$', 'profile_ask', name='profile_ask'),
url(r'^profile/answer/(?P<userid>\d+)/$', 'profile_answer', name='profile_answer'),

views.py:

def profile(request, userid):
    user_profile = get_object_or_404(User, id=userid)

    template_name = 'users/profile.html'
    if request.method == 'POST':
         pass
    return render(request, template_name, {'user_profile': user_profile})