2021-08-03-DJ-020 Django

2023-10-24 19:32
文章标签 django 03 2021 08 020 dj

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/277308

相关文章

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

对Django中时区的解读

《对Django中时区的解读》:本文主要介绍对Django中时区的解读方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景前端数据库中存储接口返回AI的解释问题:这样设置的作用答案获取当前时间(自动带时区)转换为北京时间显示总结背景设置时区为北京时间 TIM

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Django序列化中SerializerMethodField的使用详解

《Django序列化中SerializerMethodField的使用详解》:本文主要介绍Django序列化中SerializerMethodField的使用,具有很好的参考价值,希望对大家有所帮... 目录SerializerMethodField的基本概念使用SerializerMethodField的

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06