邮件的发送及配置

# 配置邮件

EMAIL_USE_SSL = True

EMAIL_HOST = 'smtp.qq.com'  # 如果是 163 改成 smtp.163.com

EMAIL_PORT = 465

EMAIL_HOST_USER = "xxx@qq.com"  # 帐号

EMAIL_HOST_PASSWORD = "xxx"  # 授权码(****)

DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
import hashlib
import uuid def get_unique_str():
# 拿到uuid4的字符串
uuid_str = str(uuid.uuid4()).encode("utf-8")
# 使用md5摘要
md5 = hashlib.md5()
md5.update(uuid_str)
# 返回十六进制的字符
return md5.hexdigest() def send_verify_mail(req):
title = "来自xx的问候"
msg = ""
from_email = settings.DEFAULT_FROM_EMAIL
recieve = [
"xx@xxx.com"
]
code = get_unique_str()
# 拼接URL
url = "http://" + req.get_host() + "/myapp/verify/"+ code
print(url)
# 渲染HTML页面
template = get_template("verify.html")
html = template.render({"url": url})
# print(html)
# 发送邮件
send_mail(title, msg, from_email, recieve, html_message=html) # 将发送的结果保存到缓存
user_id = 1 #此处应该是真实的用户id
mycache.set(code, user_id, 60 * 60)
return HttpResponse("ok") def verify(req, code):
# 获取网址后边的路径 字符串 # 去缓存尝试拿数据
val = mycache.get(code)
# 如果能拿到 我们就修改is_active字段
if val:
MyUser.objects.filter(pk=int(val)).update(is_active=True)
mycache.delete(code)
return HttpResponse("验证成功")
# 如果没拿到 就告诉他链接无效
else:
return HttpResponse("链接无效")
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
欢迎注册
<br>
<a href="{{ url }}">{{ url }}</a>
</body>
</html>

前端部分代码

日志的配置及输出

ADMINS = (
('xxx', 'xxx@xxx.com'),
('xx', 'xxx@qq.com')
)
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
SERVER_EMAIL = EMAIL_HOST_USER #邮箱账号
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
# 格式
'standard': {
'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'
},
'easy': {
'format': '%(asctime)s|%(lineno)d|%(message)s'
}
},
'filters': {
# 过滤条件
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue'
}
},
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'logging.NullHandler',
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['require_debug_false'],
},
'debug': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, "log", 'debug.log'), # 文件路径
'maxBytes': 1024 * 1024 * 5, #5M的日志
'backupCount': 15, #允许有多少个日志文件
'formatter': 'easy',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard',
},
},
'loggers': { 'django': {
'handlers': ['debug'],
'level': 'DEBUG',
'propagate': False
},
'django.request': { #系统自动调用
'handlers': ['debug', 'mail_admins'],
'level': 'ERROR',
'propagate': True, # 是否继承父类的log信息
},
# 对于不在 ALLOWED_HOSTS 中的请求不发送报错邮件
'django.security.DisallowedHost': {
'handlers': ['null'],
'propagate': False,
},
}
}

使用:

from django.http import HttpResponse
import logging
log = logging.getLogger('django') def test(req):
log.info("我是info")
1/0
return HttpResponse("ok")

django中邮件、日志的配置的更多相关文章

  1. Django 中的 日志处理

    日志处理: 上线后必须使用 便于以后的 维护 管理 根据日志 处理 BUG 在 项目中 定义一个 存放日志的 文件夹 log 存放所有 等级 的 日志 配置: 将下面的日志的 配置 写入 django ...

  2. django之logo日志的配置和使用

    一:为什么使用日志 假如,在项目调试过程中,在某些地方加上了print()函数,输出了一些调试信息.在项目上线的时候,不要将调试信息暴露出去,但是调试信息还要用,该怎么办?项目测试运行在远端服务器上, ...

  3. 测试开发之Django——No4.Django中前端框架的配置与添加

    我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的 ...

  4. django中的setting最佳配置小结

    Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运 ...

  5. Django 的 logging日志文件配置

    在Django的settings配置文件里配置以下信息: import os BASE_LOG_DIR = os.path.join(BASE_DIR , "log") # log ...

  6. django中添加日志功能

    官方文档 猛戳这里 在settings中配置以下代码 #LOGGING_DIR 日志文件存放目录 LOGGING_DIR = "logs" # 日志存放路径 if not os.p ...

  7. Django中的 动态URL配置

    举个例子,一家在线书店会为每一本书提供一个URL,如:/books/243/./books/81196/. 让我们创建第三个视图来显示当前时间和加上时间偏差量的时间,设计是这样的: /time/plu ...

  8. Spring MVC中 log4j日志文件配置相对路径

    log4j和web.xml配置webAppRootKey 的问题 1 在web.xml配置 <context-param>  <param-name>webAppRootKey ...

  9. Django 中Admin站点的配置

    Admin站点是django提供的一个后台管理页面,可以用来对用户与数据库表数据进行管理. Admin站点配置流程 1.在settings.py文件中INSTALL_APPS列表中添加django.c ...

随机推荐

  1. CNPM 安装 for angularjs

    npm config set proxy=http://127.0.0.1:8087npm config delete proxynpm config set registry=http://regi ...

  2. 深入浅出--UNIX多进程编程之fork()函数

    0前言 上周都在看都在学习unix环境高级编程的第八章--进程控制.也就是这一章中.让我理解了unix中一些进程的原理.以下我就主要依照进程中最重要的三个函数来进行解说.让大家通过阅读这一篇文章彻底明 ...

  3. Window丢失api-ms-win-crt-runtime-l1-1-0.dll

    一.现象api-ms-win-crt-runtime-l1-1-0.dll 丢失 二.第一种方案,缺什么补什么http://download.csdn.net/download/su749520/10 ...

  4. 【UML】NO.51.EBook.5.UML.1.011-【UML 大战需求分析】- 时序图(Timing Diagram)

    1.0.0 Summary Tittle:[UML]NO.51.EBook.1.UML.1.011-[UML 大战需求分析]- 时序图(Timing Diagram) Style:DesignPatt ...

  5. CentOS 7 之 Systemd 入门教程:命令篇

    Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置 历史上,Linux 的启动一直采用init进程 下面的命令用来启动服务 [root@DaMoWang ~]# ...

  6. week_one-python基础 基本语法、流程控制

    金角大王的紫金葫芦,python开发环境介绍链接:http://list.youku.com/albumlist/show/id_28961509.html # Author:larlly pytho ...

  7. 1001 害死人不偿命的(3n+1)猜想 (15 分)

    卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...

  8. 一致性hash的实现

    原文:https://blog.csdn.net/u011305680/article/details/79721030 1.不带虚拟节点的 package hash; import java.uti ...

  9. Bugku-CTF之点击一百万次

    Day16 点击一百万次 http://123.206.87.240:9001/test/ hints:JavaScript  

  10. jQuery validator plugin之Methods

    step method Makes the element require a given step. step( value ) value Type: Number Step value requ ...