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

相关文章

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

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

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

Science|癌症中三级淋巴结构的免疫调节作用与治疗潜力|顶刊精析·24-09-08

小罗碎碎念 Science文献精析 今天精析的这一篇综述,于2022-01-07发表于Science,主要讨论了癌症中的三级淋巴结构(Tertiary Lymphoid Structures, TLS)及其在肿瘤免疫反应中的作用。 作者类型作者姓名单位名称(中文)通讯作者介绍第一作者Ton N. Schumacher荷兰癌症研究所通讯作者之一通讯作者Daniela S. Thomm

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

Vue day-03

目录 Vue常用特性 一.响应更新 1. 1 v-for更新监测 1.2 v-for就地更新 1.3 什么是虚拟DOM 1.4 diff算法更新虚拟DOM 总结:key值的作用和注意点: 二.过滤器 2.1 vue过滤器-定义使用 2.2 vue过滤器-传参和多过滤器 三. 计算属性(computed) 3.1 计算属性-定义使用 3.2 计算属性-缓存 3.3 计算属

08 增删查功能

划重点: lable 标签keyup:键盘事件标签内添加样式:style使用事件修饰符:preventforEach :遍历 数组indexOf: 可以返回要查询的某个字符串值在整个字符串中首次出现的位置下标findIndex:返回传入一个测试条件(函数)符合条件数组的首个元素的位置splice:向/从数组中添加/删除项目,然后返回被删除后的新的项目数组 黑椒蟹 一对: <!DOCTYPE

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写