web应用框架——Django实践项目(十)
2020-05-28 本文已影响0人
思君_4cd3
一.个人中心页面
个人中心页面链接:https://pan.baidu.com/s/1j0WxJpJI9hhkm3ppXG_ILA
提取码:z1xe
-
将有关个人中心的页面放入到templates中
-
写一个usercenter-base.html文件
文件中的内容见下面链接:
https://github.com/zhaoXiY/MXOline/blob/master/templates/usercenter-base.html
-
我们打开usercenter-info.html文件,继承刚刚我们添加的usercenter-base.html模板
-
打开base.html添加页面链接
- 配置url,打开MXOline/urls.py文件
url(r'^users/', include(('apps.users.urls', 'users'), namespace='users')),

-
在apps/users目录下创建一个urls.py文件
-
打开这个urls.py文件
from django.conf.urls import url
from apps.organizations.views import OrgView, AddAsk, TeacherListView, TeacherDeatailView
from apps.users.views import UserInfoView
urlpatterns = [
url(r'^info/$', UserInfoView.as_view(), name='info'),
]

- 打开apps/users/views.py文件
from django.contrib.auth.mixins import LoginRequiredMixin
。。。
class UserInfoView(LoginRequiredMixin, View):
login_url = '/login/'
def get(self, request, *args, **kwargs):
return render(request, 'usercenter-info.html')

-
打开usercenter-info.html文件
-
刷新页面

二.信息传入
- 打开usercenter-info.html文件
<form class="perinform" id="jsEditUserForm" autocomplete="off">
<ul class="right">
<li>昵 称:
<input type="text" name="nick_name" id="nick_name" value="{{ user.nick_name|default_if_none:'' }}" maxlength="10">
<i class="error-tips"></i>
</li>
<li>生 日:
<input type="text" id="birth_day" name="birday" value="{{user.birthday|default_if_none:''|date:'Y-m-d'}}" readonly="readonly"/>
<i class="error-tips"></i>
</li>
<li>性 别:
<label> <input type="radio" name="gender" value="male" {% if user.gender == 'male' %}checked="checked"{% endif %} >男</label>
<label> <input type="radio" name="gender" value="female" {% if user.gender == 'female' %} checked="checked" {% endif %}>女</label>
</li>
<li class="p_infor_city">地 址:
<input type="text" name="address" id="address" placeholder="请输入你的地址" value="{{user.address}}" maxlength="10">
<i class="error-tips"></i>
</li>
<li>手 机 号:
<input class="borderno" type="text" name="mobile" readonly="readonly" value="{{ user.mobile }}">
<span class="changeemai_btn green changephone-color">[修改]</span>
</li>
<li class="button heibtn">
<input type="button" id="jsEditUserBtn" value="保存">
</li>
</ul>
</form>

-
刷新页面
- 打开usercenter-base.html文件
<div class="personal">
<dl class="user fr">
<dd>{% if user.nick_name %}{{ user.nick_name }}{% else %}
{{ user.username }}{% endif %}<img class="down fr"
src="{% static 'images/top_down.png' %}"/></dd>
<dt><img width="20" height="20" src="{{ user.image.url }}"/></dt>
</dt>
</dl>
<div class="userdetail">
<dl>
<dt><img width="80" height="80" src="{{ user.image.url }}"/></dt>
</dt>
<dd>
<h2>{{ user.nick_name }}</h2>
<p>{{ user.username }}</p>
</dd>
</dl>
<div class="btn">
<a class="personcenter fl" href="{% url 'users:info' %}">进入个人中心</a>
<a class="fr" href="{% url 'logout' %}">退出</a>
</div>
</div>
</div>

- 打开usercenter-mycourse.html文件
具体页面代码:
https://github.com/zhaoXiY/MXOline/blob/master/templates/usercenter-mycourse.html
- 修改代码内容:
<div class="personal_des permessage">
<div class="companycenter">
<div class="group_list brief">
{% for user_course in user.usercourse_set.all %}
<div class="module1_5 box">
{# <a href="{% url 'course:detail' user_course.cousrse.id %}">#}
<a href="#">
<img width="214" height="190" class="scrollLoading"
src="{{user_course.course.image.url}}"/>
</a>
<div class="des">
<a href="course-detail.html"><h2>{{user_course.course.name}}</h2></a>
<span class="fl">课时:<i class="key">{{user_course.course.learn_times}}</i></span>
<span class="fr">学习人数:{{user_course.course.students}}</span>
</div>
<div class="bottom">
<span class="fl">{{user_course.course.course_org.name}}</span>
<span class="star fr notlogin" data-favid="15">{{user_course.course.fav_nums}}</span>
</div>
</div>

- 打开apps/users/urls.py文件
from django.contrib.auth.decorators import login_required
from django.views.generic import TemplateView
urlpatterns = [
url(r'^info/$', UserInfoView.as_view(), name='info'),
url(r'^mycourse/$',login_required(TemplateView.as_view(template_name='usercenter-mycourse.html'), login_url='/login/'),
{"current_page": "mycourse"}, name='mycourse'),
]

- 打开apps/users/views.py文件
class UserInfoView(LoginRequiredMixin, View):
login_url = '/login/'
def get(self, request, *args, **kwargs):
current_page = 'info'
return render(request, 'usercenter-info.html', {
"current_page": current_page
})

-
刷新页面:
- 打开apps/users/urls.py
from apps.users.views import UserInfoView, MyFavOrgView, MyFavCourseView, MyFavTeacherView
。。。
url(r'^myfavorg/$', MyFavOrgView.as_view(), name='myfavorg'),
url(r'^myfav_teacher/$', MyFavTeacherView.as_view(), name='myfav_teacher'),
url(r'^myfav_course/$', MyFavCourseView.as_view(), name='myfav_course'),

- 打开apps/users/views.py
from apps.operations.models import UserFavorite
from apps.organizations.models import CourseOrg
...
class MyFavOrgView(LoginRequiredMixin, View):
login_url = '/login/'
def get(self, request, *args, **kwargs):
current_page = 'myfavorg'
fav_orgs = UserFavorite.objects.filter(user=request.user,fav_type = 2)
org_list = []
for fav_org in fav_orgs:
org = CourseOrg.objects.get(id = fav_org.fav_id )
org_list.append(org)
return render(request, 'usercenter-fav-org.html', {
"current_page": current_page,
"org_list":org_list
})
class MyFavTeacherView(LoginRequiredMixin, View):
login_url = '/login/'
def get(self, request, *args, **kwargs):
pass
class MyFavCourseView(LoginRequiredMixin, View):
login_url = '/login/'
def get(self, request, *args, **kwargs):
pass

-
打开templates/usercenter-base.html文件
- 打开templates/usercenter-fav-org.html文件,修改收藏的模板
文件链接为:
https://github.com/zhaoXiY/MXOline/blob/master/templates/usercenter-fav-org.html
-
刷新页面
三、修改密码
-
打开usercenter-info.html文件
-
找到static文件夹,右击全局搜索
-
搜索刚刚的id,我们就会找到这个文件
- 打开apps/users/urls.py文件
from apps.users.views import UserInfoView, MyFavOrgView, MyFavCourseView, MyFavTeacherView, ChangePwdView
url(r'^update/pwd/$', ChangePwdView.as_view(), name='update_pwd'),

- 打开apps/users/form.py文件
class ChangePwodForm(forms.Form):
password1 = forms.CharField(required=True, min_length=5)
password2 = forms.CharField(required=True, min_length=5)
def clean(self):
pwd1 = self.cleaned_data["password1"]
pwd2 = self.cleaned_data["password2"]
if pwd1 != pwd2:
raise forms.ValidationError("密码不一致")
return self.cleaned_data

- 打开apps/users/views.py文件
from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
from apps.users.form import LoginForm, ChangePwodForm
。。。
class ChangePwdView(LoginRequiredMixin, View):
login_url = '/login/'
def post(self, request, *args, **kwargs):
pwd_form = ChangePwodForm(request.POST)
if pwd_form.is_valid():
pwd1 =request.POST.get("password1","")
user = request.user
user.set_password(pwd1)
user.save()
return JsonResponse({"status":"success"})
else:
return JsonResponse(pwd_form.errors)

-
打开templates/usercenter-base.html文件
-
刷新页面
(此文章仅作为个人学习笔记使用,如有错误欢迎指正~)
这些的代码可在我的GitHub上面查看: