就像球队各自有各自的页面介绍,每个用户也需要有各自的介绍
前面一章节里面,我已经完成了用户模型的建立并创建了users这个app
这章节,我们从url配置开始做, 第一个register是上一篇幅中的注册路由,而第二个路由就是每个用户的个人页面,比如我的用户名是 testuser1的话,那路由就是
http://127.0.0.1:8000/users/profile/testuser1
from django.urls import path
from . import views
app_name = 'users'
urlpatterns = [
path('register/',views.register,name='register'),
path('profile/<str:user_name>',views.user_profile,name='user_profile'),
]
路由设置好以后,我们进入views视图函数
def user_profile(request,user_name):
user_info = User.objects.get(username=user_name)
return render(request,'user_profile.html',locals())
随后我们来到前端面板,进行渲染
{% extends 'base_page.html' %}
{% block title %}用户页面{% endblock %}
{% load staticfiles %}
{% block content %}
<p>Username: {{user_info}}</p>
<p>Email: {{ user_info.email }}</p>
这样,一个简单的用户界面页面就做好了
那我们如何让用户可以找到自己的用户页面呢?不可能让用户自己每次手打URL。
所以我们需要再修改一下index的前端页面
请注意,在页面里面我添加了user.is_authenticated的判断,看用户处于是否登录的状态,再决定显示什么内容
而
<a href="{% url 'users:user_profile' user.username %}">
这句则是将用户导入到了用户个人页面
即使是用户手动打URL,定位到非自己的用户页面
比如127.0.0.1:8000/users/profile/testuser2 ,那页面也会根据URL里面的user_name是testuser2,而定位到testuser2这个用户的页面
{% extends 'base_page.html' %}
{% block title %}球队总览页面{% endblock %}
{% block content %}
{% for team in team_list %}
<a href="{% url 'team:team_page' team.team_id %}">{{ team.team_chinese_name }}</a>
{% endfor %}
<br>
{% if user.is_authenticated %}
<p>您已登录,欢迎您<a href="{% url 'users:user_profile' user.username %}">{{ user.username }}</a></p>
<button>
<a href="{% url 'logout' %}?next={{ request.path }}">注销登录</a>
</button>
<button>
<a href="{% url 'password_change' %}?next={{ request.path }}">修改密码</a>
</button>
{% else %}
<p>您还没有登录
<button><a href="{% url 'login' %}?next={{ request.path }}">登录</a></button>
或者
<button><a href="{% url 'users:register' %}">注册</a></button>
<a href="{% url 'password_reset' %}">忘记密码?</a>
<input type="hidden" name="next" value="{{ next }}"/>
{% endif %}
{% endblock %}