如何让未注册的用户拥有完全访问用户个人资料及其链接的权限?
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})
我在模板中有以下内容
<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})