本文主要是介绍2021-08-03-DJ-020 Django,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这一篇做一个用户的个人中心
涉及到图片 上传和 模型保存,相关技术在前面的 几节都讲过了,这里简单介绍怎么实现 。这里留下一个问题就是保存的时候手机号没有经过验证,这里可能是字段验证器没有工作。但是站点管理界面里修改是有提示的,修改失败 也不应该被存起来吧。数据库里面确实保存了。
好了,还是看看 这一节
这一节做完的 源码在这里,这次分享的没带环境,自己装下相关库
我的Django专栏020阶段用户个人中心的操作演示
1.用户中心入口
个人用户中心的入口设置在导航条的下拉块里,加了一个判断,如果是有session里面用户是有值的,那么 就把这个地方加一个链接,没有就是空链接。
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown"><a class="dropdown-item" href="#!">Action</a><a class="dropdown-item" href="#!">Another action</a><div class="dropdown-divider"></div><a class="dropdown-item" href="{% if request.session.login_user.user_name %}{% url 'main:usercenter' username=request.session.login_user.user_name %}{% else %}#!{% endif %}">登录者:{{ request.session.login_user.user_name|default:"未登录" }}</a>{% if request.session.login_user.user_name != None %}<a class="dropdown-item" href="{% url 'main:logout' %}">退出登录</a>{% endif %}</div>
2.用户中心视图函数
这里主要做判断,判断进去的用户是不是当前 用户,如果不是当前的用户那就是违法访问别人的个人中心,直接给他阻断。然后就是上传头像,判断头像的大小。
usercenter.py
import os
from os.path import existsfrom django.contrib.auth.hashers import check_password
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render, redirectfrom mainapp.models import UserModeldef usercenter(request,username):if username==request.session['login_user']['user_name']:myuser_set=UserModel.objects.filter(name=username)if myuser_set.exists():myuser=myuser_set.first()else:return HttpResponse('用户名错误',status=404)else:return HttpResponse('用户未授权访问', status=404)if request.method=='POST':age =request.POST.get('age',None)number=request.POST.get('number',None)image=request.FILES.get('image1',None)name=request.session['login_user']['user_name']myuser:UserModel=UserModel.objects.filter(name=name).first()# print(image)if image:print(image.name,image.content_type,image.size)if all((image.content_type.startswith('image/'),image.size<5*1024*1024)):filename=r'media/mainapp/user/test/'+name+os.path.splitext(image.name)[-1]#重命名,也是存储路径img1=r'mainapp/user/test/'+name+os.path.splitext(image.name)[-1]with open(filename,'wb') as f:for chunk in image.chunks():f.write(chunk)f.flush()print('文件上传成功')else:error_msg='文件类型或大小不符合 要求(图片类型,5MB以内,修改失败)'# print(error_msg)return render(request, 'mainapp/usercenter.html', locals())else:img1=myuser.img1#不上传就还是原来的地址try:myuser.img1=img1if age:myuser.age=int(age)if number:myuser.number=numberexcept:error_msg='保存错误,请校验信息'return render(request, 'mainapp/usercenter.html', locals())myuser.save()return render(request,'mainapp/usercenter.html',locals())
3.建立路由
path('usercenter/<username>',usercenter,name='usercenter'), # 020用户中心
4.模板
usercenter.html
模板的效果直接看图片吧
{% extends 'index.html' %}
{% block metas %}{% if request.COOKIES.token == None %}<meta http-equiv="refresh" content="3;url=/main/logout">{% endif %}
{% endblock %}{% block title %}
用户列表
{% endblock %}{% block content %}
{% if request.COOKIES.token != None %}<h2>登录者:{{ request.session.login_user.user_name }}的用户中心</h2><h3>{{ error_msg }}</h3><form class="form form-control-plaintext" align="left" method="post" enctype="multipart/form-data">{% csrf_token %}<div class="form-group"><div class="form-control col-xs-6"><label class="col-xs-1"> 年龄</label><input name="age" value="{{ myuser.age }}" placeholder="年龄"></div></div><div class="form-group"><div class="form-control col-xs-6"><label class="col-xs-1"> 电话</label><input name="number" placeholder="电话" value="{{ myuser.number }}"></div></div><div class="form-group"><div class="form-control col-xs-6"><img src="/media/{{ myuser.img1|escape }}" alt="头像" height="100"><input name="image1" type="file"></div></div><div class="btn btn-default"><button class="col-xs-3 btn btn-outline-danger">修改</button><a class="btn-danger" href="/main/list">放弃修改,返回主页?</a></div></form>{% else %}<h3>用户未登录,3秒后进入登录页</h3>
{% endif %}{% endblock %}
5.用户中心的效果
还有涉及到的就是修改list.html显示头像的高度,不然文件太大的会撑满页面。
这篇关于2021-08-03-DJ-020 Django的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!