学习Django(续)

本文介绍了Django中如何实现用户系统,包括仅存session的登录状态保持,登录状态校验及自动跳转。接着讲解了文件上传功能,通过创建模型存储文件路径并处理POST请求实现上传。同时,提到了CSRF问题及其解决方案。此外,还探讨了Django发送邮件的三个协议,并展示了配置SMTP发送邮件的过程。最后,学习了错误处理中间件,通过捕获异常并发送错误报告邮件提高项目稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

P43 8.01内建用户系统

【续】该博主《学习Dajngo》
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只存session,但(登录状态保持)时间不可控。
先校验密码,再调用login(正常应该先判断用户是否存在,再调用login)

在这里插入图片描述
当进行操作时,可能需要校验登录状态,在该方法前加@login_required
在这里插入图片描述
【一个例子】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#上下两个截图顺序有点乱,暂未核实(应该是 缺少部分)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#并没有看出是怎么跳转的欸,别的方法里还是views里

配置
在这里插入图片描述

在这里插入图片描述
查看,会自动跳转
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
一对一,后面更复杂;继承前面复杂后面简单
在这里插入图片描述
【必须在第一次python manage.py makemigration前创建】
在这里插入图片描述

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

P44 8.02 文件上传

【缺少18:10前的】
在这里插入图片描述
#需手动添加才能生效?
在这里插入图片描述
法一
在这里插入图片描述

法二(避免重名问题)
在这里插入图片描述

先创建一个模板(建表)用来存储数据存储路径的信息。
创建一个upload_app应用,在其models中创建字段,如下:
在这里插入图片描述
修改前面的test_upload

def test_upload(request):
    if request.method == 'GET':
        return render(request,'test_upload.html')
    elif request.method == 'POST':
        #和HTML里的input的name有关
        #文本框直接用post方法
        title =  request.POST['title']
        #file的type所以用这个方法?
        myfile = request.FILES['myfile']
        Content.objects.create(title=title,picture=myfile)
        return HttpResponse('--上传文件成功--')

查看 http://127.0.0.1:8000/test_upload,上传文件(不能为空!!不然报错MultiValueDictKeyError),但由于没有csrf(具体还不是很理解)导致403
在这里插入图片描述
(1)在views中加装饰器?
(2)在HTML中加

{% crsf_token %}

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

P45 8.03 django发送邮件

在这里插入图片描述
三个重要的协议
(1)发送邮件
在这里插入图片描述
(2)接收邮件,单向
在这里插入图片描述
(3)接收邮件,可实现仅获取摘要,双向操作
一旦启动会down所有邮件,所以稍慢
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
按照要求完成后可获得授权码,复制后在django中找个地暂存一下。

在这里插入图片描述
粘到settings里
在这里插入图片描述

#邮件相关配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.qq.com'#不同邮箱,更改qq应该就可 SMTP服务器地址
EMAIL_PORT = 25 #SMTP服务的端口号
EMAIL_HOST_USER = '3xxxxx9@qq.com' #发送邮件的邮箱
EMAIL_HOST_PASSWORD = '' #授权码
#EMAIL_USE_TLS = False #与SMTP服务器通信时,是否启动TLS连接(安全链接),默认False,不然慢
#QQ邮箱不能设置这个?

在这里插入图片描述

到shell里测试
在这里插入图片描述

在这里插入图片描述
1)在middleware应用的mymiddleware.py中创建类ExceptionMW

class ExceptionMW(MiddlewareMixin):
    def process_exception(self,request,exception):
        print(exception)
        return HttpResponse('--对不起 当前网页有点忙')

2)在settings里注册

'middleware.mymiddleware.ExceptionMW',

在这里插入图片描述
3)创造一个错误来测试
在这里插入图片描述
在这里插入图片描述
但仅有一行简单的输出

在这里插入图片描述
在中间件中导入库,并打印追溯的错误

import traceback

print(traceback.format_exc())

刷新页面后将输出具体错误
在这里插入图片描述

在中间件类中添加以下内容,实现将报错内容发送给邮箱

from django.conf import settings
from django.core import mail

mail.send_mail(subject='djangoProject报错',message=traceback.format_exc(),
                       from_email='305650089@qq.com',recipient_list=settings.EX_EMAIL)

注意在settings里配置,便于重复利用?
在这里插入图片描述

项目部署1

##听不懂了orz,由于暂时不需要部署,故更新到此结束啦~
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值