【Django】内建用户、文件上传、发送邮件、项目部署

news2024/10/6 7:00:42

一、内建用户系统

Django带有一个用户认证系统用来处理账号、cookie等

from django.contrib.auth.models import User

在这里插入图片描述
在这里插入图片描述

1、创建用户

from django.contrib.auth.models import User
# 普通用户
user = User.objects.create_uer(username='用户名',password='密码',email='邮箱')
# 超级用户
user = User.objects.create_superuer(username='用户名',password='密码',email='邮箱')

会存储在mysql的auth_user中

2、删除用户

from django.contrib.auth.models import User
try:
	user = User.objects.get(username='用户名')
	user.is_active = False #伪删除
	user.save()
except:
	...删除失败

3、校验密码

from django.contrib.auth import authenticate
user = authenticate(username = username,password =password)
# 成功返回user对象,失败返回None

4、修改密码

from django.contrib.auth.models import User
try:
	user = User.objects.get(username='用户名')
	user.set_password('新密码')
	user.save()
except:
	...修改失败

5、登录状态保持

只能校验session 不能存cookie

from django.contrib.auth import login
def login_view(request):
	user = authenticate(username = username,password =password)
	login(request,user)

6、登录状态校验

不用再自己写装饰器,可直接调用内置的

from django.contrib.auth.decorators import login_required

@login_required
def index_view(request):
	# 当前登录用户可通过request.user获取
	login_user = request.user

7、登录状态取消

from django.contrib.auth import logout
def logout_view(request):
	logout(request)

8、扩展字段

方案1:通过建立新表,跟内建表做1对1(创建简单,使用麻烦)
方案2:继承内建的抽象user模型类(创建麻烦,使用简单)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、文件上传

1、前端

  1. 文件上传必须为POST提交方式
  2. 表单form中必须带有 enctype='multipart/form-data时才会包含文件内容数据。
  3. <input type= 'file' name='xxx'>标签上传文件
    <form action="/test_upload/" method="POST" enctype="multipart/form-data">
        <p>
            <input type="text" name="title">
        </p>
        <p>
            <input type="file" name="myfile">
        </p>
        <p>
            <input type="submit" value="上传">
        </p>
    </form>

2、配置

1、在settings.py中设置MEDIA相关配置:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

2、创建media文件夹
3、手动绑定

# 在主路由中添加路由
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

3、后端

  1. FILES的key对应页面中file框的name值
  2. file = request.FILES[‘xxx’] 绑定文件对象
  3. file.name 可得到文件名
  4. file.file 可得到文件的字节流数据

4、文件写入

(1)open写入

@csrf_exempt
def upload_view(request):
	if request.method=='GET':
		return render(request,'test_upload.html')
	elif request.method == 'POST':
		a_file = request.FILES['myfile']
		print('上传的中文名是',a_file.name)
		# 拼接绝对路径
		filename = os.path.join(settings.MEDIA_ROOT,a_file.name)
		with open(filename,'wb') as f:
			data = a_file.file.read()
			f.write(data)
		return HttpResponse('接收文件'+a_file.name+'成功')

会有文件重名现象

(2)借助ORM

字段:FileField(upload=‘子目录名’)
作用:将文件的路径存入数据库中,方便与后续功能进行绑定(用户与头像等)

class Content(models.Model):
    title = models.CharField('文章名字',max_length=11)
    picture = models.FileField(upload_to='picture')
    
from upload_app.models import Content
@csrf_exempt
def test_upload(request):
    if request.method == 'GET':
        return render(request,'test_upload.html')
    elif request.method == 'POST':
        title = request.POST['title']
        a_file = request.FILES['myfile']
        Content.objects.create(title=title,picture=a_file)
        return HttpResponse('接收文件'+a_file.name+'成功')

三、发送邮件

业务场景:业务告警、邮件验证、密码找回

1、邮箱协议

  1. SMTP协议:简单邮件传输协议,从源地址到目的地址传输邮件的规范,用来控制邮件的中转,属于推送协议。
  2. IMAP协议:交互式邮件访问协议,用来从本地邮件客户端访问远程服务器上的邮件,属于拉取协议。可先浏览部分摘要,再卸载整个邮件。属于双向协议,客户端的操作可反馈给服务器。
  3. POP3协议:邮局协议,用于支持使用客户端远程管理在服务器上的电子邮件,属于拉取协议。必须下载全部邮件。是单项协议,客户端操作无法同步给服务器。
    在这里插入图片描述

2、Django中的邮箱

  1. Django充当邮件客户端的角色,主要为SMTP协议,负责发送邮件。
  2. 给Django授权一个邮箱,用该邮箱给对应收件人发送邮件
  3. django.core.mail封装了电子邮件的自动发送SMTP协议。

授权步骤:
1、修改邮箱的POP3/IMAP服务
2、Django配置

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com' # 腾讯邮箱SMTP服务器地址
EMAIL_PORT = 25 # SMTP服务器的端口号
EMAIL_HOST_USER = 'xxxx@qq.com'
EMAIL_HOST_PASSWORD = 'XXXXXXXXX' # 第三方登录的授权码
EMAIL_USE_TLS = False # 与SMTP服务器通信时是否启用TLS链接(安全链接) 默认False 

3、函数调用

from django.core import mail
mail.send_mail(
	subject, # 题目
	message, # 消息内容
	from_email, # 发送者
	recipient_list = ['xxx@qq.com'], # 接收者邮件列表
)

3、练习 - 邮件告警

用中间件实现抓取视图函数中的异常,并以邮件的形式将异常信息发送给指定联系人。要求收件人可以灵活配置。

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
from django.conf import settings
from django.core import mail
import traceback

class MAILWarningMW(MiddlewareMixin):
    def process_exception(self, request, exception):
        # 显示报错的整体情况traceback.format_exc()
        mail.send_mail(subject='mysite1异常告警',message=traceback.format_exc(),from_email='1065621633@qq.com',recipient_list = settings.RECIPIENT_EMAIL)
        # settings.RECIPIENT_EMAIL是自定义配置的收件人邮箱
        return HttpResponse('当前网页有点忙')

四、项目部署

在开发完毕后,将开发机器上运行的软件实际安装到服务器上长期运行。
1、在安装机器上安装和配置同版本的环境
2、django项目迁移

sudo scp ...../django/mysite1 root@88.77.66.55:......./xxx

3、用uWSGI替代python3 manage.py runserver 方法启动服务器
4、配置nginx反向代理服务器
5、用nginx配置静态文件路径,解决静态路径问题

1、uWSGI网关接口配置

WSGI是python应用程序或框架和Web服务器之间的一种接口,他不能读http和https协议。
在这里插入图片描述

uWSGI是WSGI的一种,可以实现http协议、WSGI协议、uwsgi协议等。
在这里插入图片描述

  1. 安装:sudo pip3 install uwsgi==2.0.18 -i https://pypi.tuna.tsinghua.edu.cn/simple/
  2. 添加配置文件:项目同名文件夹/uwsgi配置名.ini 如:mysite1/mysite1/project1.ini
[uwsgi] # 必须以此开头
socket=127.0.0.1:8000 # 套接字方式的IP地址:端口号,此模式需要有nginx
http=127.0.0.1:8000 # Http通信方式的IP地址:端口号
# 项目当前工作目录 是绝对路径
chdir = /home/tarena/.../my_project
# 项目中wsgi.py文件的目录,即当前工作目录 是相对路径
wsgi-file = my_project/wsgi.py
# 进程个数
process = 4
# 每个进程的线程个数
threads = 2
# 服务的pid记录文件
pidfile = uwsgi.pid
# 服务的日志文件位置
daemonize = uwsgi.log
# 开启主进程管理模式
master = True
  1. settings中需修改的配置
DEBUG= True 改为 False
ALLOWED_HOSTS= [] 改为 ['网站域名']或者['服务监听的ip地址']
  1. uWSGI的运行管理
    启动uwsgi:cd到uWSGI配置文件 所在目录 uwsgi --ini uwsgi.ini
    停止uwsgi:cd到uWSGI配置文件所在目录 uwsgi --stop uwsgi.pid
  2. 运行说明
    无论启动还是关闭,都需要执行ps aux|grep 'uwsgi' 确认是否符合预期。
    启动成功后,所有日志均输出在uwsgi.log中。
    Django中代码有任何修改,需要重新启动uwsgi。
  3. uWSGI测试

在这里插入图片描述

2、Nginx

是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理负载均衡(多台服务器轮流处理请求)等一系列重要特性。原理是客户端请求nginx,再由nginx将请求转发uWSGI运行的django。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时服务器的端口改为了80,而不再是8000。

在这里插入图片描述
在这里插入图片描述

3、nginx静态文件配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、nginx的其他功能

404/500页面
在这里插入图片描述
邮箱告警
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/366421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这几个免费、商用图片素材网,你一定要知道

很多朋友不知道去哪里找图片素材&#xff0c;找到了又担心会不会侵权。 今天给大家分享7个免费可商用图片素材网站&#xff0c;这下再也不用担心找不到素材或侵权啦&#xff01; 1、菜鸟图库 传送门&#xff1a;美女图片|手机壁纸|风景图片大全|高清图片素材下载网 - 菜鸟图库…

hive只复制表结构不复制表数据

目录 一、背景 二、准备测试数据 1.建表 2.造测试数据 三、操作 1.CTAS &#xff08;1&#xff09;.无分区表测试 &#xff08;2&#xff09;.分区表测试 2.LIKE &#xff08;1&#xff09;.无分区表测试 &#xff08;2&#xff09;.分区表测试 一、背景 有一张ori_…

《狂飙》壁纸大嫂如此惊艳,做成日历壁纸天天看

兄弟们&#xff0c;今年的反腐大剧狂飙都有看吗 &#xff1f; 话说&#xff0c;名字虽然叫狂飙&#xff0c;但是全剧只有有田一个人在狂飙&#xff01; 当然&#xff0c;有田虽然亮眼&#xff0c;但是毕竟是个糟老头子&#xff0c;正经人谁看有田啊&#xff0c;当然是看大嫂了…

【在 Colab 中使用 TensorBoard 绘图】

【在 Colab 中使用 TensorBoard 绘图】进入 Google Drive进入 Colab在深度学习中&#xff0c;使用本机GPU跑可能会比较慢&#xff0c;这里使用 Google Drive Colab 进行训练&#xff0c;运行代码 进入 Google Drive 进入网盘 初次进入需要注册账号。注意科学上网即可。右键…

路由器防火墙配置(14)

实验目的 通过本实验&#xff0c;理解路由器的防火墙工作原理&#xff0c;掌握路由器的防火墙功能配置方法&#xff0c;主要包括网络地址转换功能和数据包过滤功能的配置。 培养根据具体环境与实际需求进行网络地址转换及数据包过滤的能力。 预备知识网络地址转换 网络地址转…

SSIM学习

SSIM原文链接&#xff1a;https://www.researchgate.net/profile/Eero-Simoncelli/publication/3327793_Image_Quality_Assessment_From_Error_Visibility_to_Structural_Similarity/links/542173b20cf203f155c6bf1a/Image-Quality-Assessment-From-Error-Visibility-to-Struct…

Window 的 PHP XAMPP 安装 mongodb 的扩展

需要安装的扩展为&#xff1a;extensionphp_mongodb.dll根据官方的指引&#xff1a;PHP: Installing the MongoDB PHP Driver on Windows - Manual 1需要到 GitHub 上下载扩展&#xff0c;然后进行安装。这里的版本选择有些讲究。首先1.51 是 mongoDB 的驱动版本号&#xff0c;…

Bulletproofs++

1. 引言 前序博客&#xff1a; Bulletproofs: Short Proofs for Confidential Transactions and More学习笔记Bulletproofs 代码解析Bulletproofs: Shorter Proofs for Privacy-Enhanced Distributed Ledger学习笔记Bulletproofs 代码解析 Liam Eagen 2022年3月论文《Bullet…

canvas动画及案例

介绍 由于我们是用 JavaScript 去操控 对象&#xff0c;这样要实现一些交互动画也是相当容易的。 可能最大的限制就是图像一旦绘制出来&#xff0c;它就是一直保持那样了。如果需要移动它&#xff0c;我们不得不对所有东西&#xff08;包括之前的&#xff09;进行重绘。重绘是…

SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境

制作通用模块jar包 通用模块不是运行的&#xff0c;而且要被其他模块引入的&#xff0c;所以该模块不能采用springboot打包方式制作jar包&#xff0c;否则其他模块无法引入通用模块。 1、修改通用模块&#xff0c;设置模块为非Springboot项目 <?xml version"1.0&qu…

致盛咨询携手亚马逊云科技进一步开拓中国市场

作为医疗保健领域的咨询公司&#xff0c;ZS需要保证服务可靠性、敏捷性和安全性的同时&#xff0c;获得经济效益。亚马逊云科技丰富的云服务产品简化了ZS基础架构的搭建&#xff0c;为ZS节省了大量的人力与资金成本。同时&#xff0c;缩短了ZS扩展基础设施的周转时间&#xff0…

LeetCode Cookbook 哈希表(collections.Counter()和collections.defaultdict())

好久不更了&#xff0c;这次一鼓作气&#xff0c;学完它&#xff01; 文章目录LeetCode Cookbook 哈希表30. 串联所有单词的子串36. 有效的数独&#xff08;很不错的循环题目&#xff09;49. 字母异位词分组290. 单词规律447. 回旋镖的数量575. 分糖果594. 最长和谐子序列599. …

Read book Netty in action(Chapter VI)--ByteBuf

序言 之前学习了传输&#xff0c;通过前面的学习我们都知道&#xff0c;网络数据的基本单位是字节。JDK中提供了ByteBuffer作为字节的容器&#xff0c;但是过于繁琐复杂&#xff0c;Netty中提供了ByteBuf作为替代品。学习一下。 API Netty的数据处理API通过两个组件暴露 ---…

STM32开发(15)----芯片内部温度传感器

芯片内部温度传感器前言一、什么是内部温度传感器&#xff1f;二、实验过程1.STM32CubeMX配置2.代码实现3.实验结果总结前言 本章介绍STM32芯片温度传感器的使用方法和获取方法。 一、什么是内部温度传感器&#xff1f; STM32 有一个内部的温度传感器&#xff0c;可以用来测…

竣达技术 | 巡检触摸屏配合电池柜,电池安全放首位!

机房蓄电池常见的故障 1.机房电池着火和爆炸 目前在数据机房蓄电池爆炸着火事故频发&#xff0c;导致业主损失严重。一般机房电池是由于其中一节电池裂化后未妥善管理&#xff0c;电池急剧恶化导致爆炸着火。由于电池是串联及并联在使用&#xff0c;只要一节着火燃烧整片瞬间…

RK3399平台开发系列讲解(LED子系统篇)LED子系统详解

🚀返回专栏总目录 文章目录 一、设备树编写二、LED子系统2.1、用户态2.2、内核驱动三、驱动代码3.1、平台设备驱动的注册3.2、平台设备驱动的probe四、使用方法沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将详细介绍LED子系统。 一、设备树编写 节点属性添加…

免费领取丨精算与金融建模行业解决方案白皮书,不要错过!

一、我国精算行业现状 精算学是对人类社会所面临的各种风险及其他客观事务进行量化分析和处理的一门科学。在保险、金融、投资和各类风险管理等许多领域得到广泛应用&#xff0c;尤其在保险和社会保障领域&#xff0c;已成为不可或缺的科学和技术&#xff0c;以保险公司为例&a…

直播间的2个小感悟

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 在线人数固定 最近直播间出现了很多新面孔&#xff0c;有的是偶然刷到的&#xff0c;有的是关注互联网找到的。而直播间的人数一直没什么变化&#xff0c;卢松松在抖音直播较少&#xff0c;主播间…

mysql 8.0.22安装

mysql8.0.22安装1. 配置my.ini2. 添加环境变量3. 安装mysql3.1 mysql初始化3.2 安装mysql服务3.3 启动mysql服务4. 连接数据库修改连接数据库的密码前提&#xff1a;已经从官网下载mysql8.0.22安装包并解压&#xff08;下载地址&#xff1a;https://dev.mysql.com/downloads/in…

设计模式学习笔记 - 外观模式

设计模式学习笔记 - 外观模式一、影院管理问题二、传统方式解决影院管理问题三、外观模式介绍1、基本介绍2、原理类图四、外观模式解决影院管理问题五、外观模式在MyBatis框架应用的源码分析六、外观模式的注意事项和细节一、影院管理问题 组建一个家庭影院&#xff1a;DVD 播放…