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

时间:2015-08-08 04:02:03

标签: django django-models django-templates django-views

我在模板中有以下内容

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

访客访问者可以访问该页面,只要他/她输入链接,但页面中的链接(上述模板)不起作用。 我在这里做错了什么? 谢谢。

1 个答案:

答案 0 :(得分:1)

你可以采取两种方法(第二种是首选方法):

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