Python学习笔记_进阶篇(四)_django知识(三)

本章内容:

  • Django 发送邮件
  • Django cookie
  • Django session
  • Django CSRF

Django 发送邮件

我们常常会用到一些发送邮件的功能,比如有人提交了应聘的表单,可以向HR的邮箱发邮件,这样,HR不看网站就可以知道有人在网站上提交了应聘信息。今天我们尝试用django发送邮件做尝试

1、配置相关参数settings

往settings添加下面几行数据

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'EMAIL_USE_TLS = False
# 邮箱服务器
EMAIL_HOST = 'smtp.163.com'
# 端口号
EMAIL_PORT = 25
# 发件邮箱账号
EMAIL_HOST_USER = 'zhangyanlin8851@163.com'
# 发件邮箱密码
EMAIL_HOST_PASSWORD = '邮箱密码'
# 发件人
DEFAULT_FROM_EMAIL = 'zhangyanlin<zhangyanlin8851@163.com>'

下面是一些常用的邮箱参数:

  • 163 邮箱
  • 126 邮箱
  • QQ 邮箱

2、官方事例

2.1、先看下官方给的例子

from django.core.mail import send_mailsend_mail('Subject here', 'Here is the message.', 'from@example.com',['to@example.com'], fail_silently=False)

2.2、发送多个邮件

from django.core.mail import send_mass_mailmessage1 = ('Subject here', 'Here is the message', 'from@example.com', ['first@example.com', 'other@example.com'])
message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second@test.com'])send_mass_mail((message1, message2), fail_silently=False)

3、发送邮件

 from django.shortcuts import render,HttpResponse
from django.conf import settings
from django.core.mail import EmailMultiAlternativesdef email(request):subject = '来自张岩林的问候'text_content = '这是一封重要的邮件.'html_content = '<p>这是一封<strong>重要的</strong>邮件.</p>'from_email = settings.DEFAULT_FROM_EMAILmsg = EmailMultiAlternatives(subject, text_content, from_email, ['75501664@qq.com'])msg.attach_alternative(html_content, "text/html")msg.send()return HttpResponse('OK')

写完这段代码访问以下相对应得URL可以看看邮件有没有发送成功哟

Django Cookie

1、获取cookie

 # 方式一
request.COOKIES['key']
# 方式二
request.COOKIES.get('key')
# 方式三
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
# 参数:default: 默认值salt: 加密盐max_age: 后台控制过期时间

2、设置cookie

rep = HttpResponse(...) 或 rep = render(request, ...)rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt ='加密盐',...)参数:key,              键value='',         值max_age=None,     超时时间expires=None,     超时时间(IE requires expires, so set it if hasn't been already.)path='/',         Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问domain=None,      Cookie生效的域名secure=False,     https传输httponly=False    只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

Django Session

一、session使用

     def index(request):# 获取、设置、删除Session中数据request.session['k1']request.session.get('k1',None)request.session['k1'] = 123request.session.setdefault('k1',123) # 存在则不设置del request.session['k1']# 所有 键、值、键值对request.session.keys()request.session.values()request.session.items()request.session.iterkeys()request.session.itervalues()request.session.iteritems()# 用户session的随机字符串request.session.session_key# 将所有Session失效日期小于当前日期的数据删除request.session.clear_expired()# 检查 用户session的随机字符串 在数据库中是否request.session.exists("session_key")# 删除当前用户的所有Session数据request.session.delete("session_key")

二、session种类

Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:

  • 数据库(默认)
  • 缓存
  • 文件
  • 缓存+数据库
  • 加密cookie

1、数据库Session

Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。

配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)

2、缓存Session

 配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串SESSION_COOKIE_PATH = "/"                                # Session的cookie保存的路径SESSION_COOKIE_DOMAIN = None                              # Session的cookie保存的域名SESSION_COOKIE_SECURE = False                             # 是否Https传输cookieSESSION_COOKIE_HTTPONLY = True                            # 是否Session的cookie只支持http传输SESSION_COOKIE_AGE = 1209600                              # Session的cookie失效日期(2周)SESSION_EXPIRE_AT_BROWSER_CLOSE = False                   # 是否关闭浏览器使得Session过期SESSION_SAVE_EVERY_REQUEST = False                        # 是否每次请求都保存Session,默认修改之后才保存

3、文件Session

 配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()                                      SESSION_COOKIE_NAME = "sessionid"                          # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串SESSION_COOKIE_PATH = "/"                                  # Session的cookie保存的路径SESSION_COOKIE_DOMAIN = None                                # Session的cookie保存的域名SESSION_COOKIE_SECURE = False                               # 是否Https传输cookieSESSION_COOKIE_HTTPONLY = True                              # 是否Session的cookie只支持http传输SESSION_COOKIE_AGE = 1209600                                # Session的cookie失效日期(2周)SESSION_EXPIRE_AT_BROWSER_CLOSE = False                     # 是否关闭浏览器使得Session过期SESSION_SAVE_EVERY_REQUEST = False                          # 是否每次请求都保存Session,默认修改之后才保存

4、缓存+数据库Session

 数据库用于做持久化,缓存用于提高效率配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎

5、加密cookie Session

 配置 settings.pySESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎

6、session自定义验证登录,装饰器

 def login(func):def wrap(request, *args, **kwargs):# 如果未登陆,跳转到指定页面if request.path == '/index/':return redirect('/login/')return func(request, *args, **kwargs)return wrap

Django CSRF

一、简介

django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

全局:

中间件 django.middleware.csrf.CsrfViewMiddleware

局部:

  • @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
  • @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

注:from django.views.decorators.csrf import csrf_exempt,csrf_protect

二、应用

1、普通表单

 veiw中设置返回值:return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))  或者return render(request, 'xxx.html', data)html中设置Token:{% csrf_token %}

2、ajax

view.py

from django.template.context import RequestContext
# Create your views here.def test(request):if request.method == 'POST':print request.POSTreturn HttpResponse('ok')return  render_to_response('app01/index.html',context_instance=RequestContext(request))

index.html

<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title></title>
</head>
<body>{% csrf_token %}<input type="button" onclick="Do();"  value="Do it"/><script src="/static/plugin/jquery/jquery-1.8.0.js"></script><script src="/static/plugin/jquery/jquery.cookie.js"></script><script type="text/javascript">var csrftoken = $.cookie('csrftoken');function csrfSafeMethod(method) {// these HTTP methods do not require CSRF protectionreturn (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));}$.ajaxSetup({beforeSend: function(xhr, settings) {if (!csrfSafeMethod(settings.type) && !this.crossDomain) {xhr.setRequestHeader("X-CSRFToken", csrftoken);}}});function Do(){$.ajax({url:"/app01/test/",data:{id:1},type:'POST',success:function(data){console.log(data);}});}</script>
</body>
</html>

注:原文出处http://www.cnblogs.com/wupeiqi/articles/5237704.html

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

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

相关文章

FreeRTOS源码分析-12 低功耗管理

目录 1 STM32低功耗管理概念及应用 1.1睡眠模式 1.2 停止模式 1.3 待机模式 2 Tickless低功耗管理 2.1 Tickless低功耗模式介绍 2.2 FreeRTOS低功耗模式配置 2.3 FreeRTOS低功耗模式应用 3 低功耗管理实际项目开发 3.1 低功耗设计必须要掌握的硬件知识 …

Debian11 Crontab

Crontab用户命令 可执行文件 crontab命令的可执行文件在哪儿&#xff1f; $ which -a crontab /usr/bin/crontab /bin/crontabcrontab命令的可执行文件有2个&#xff1a;/usr/bin/crontab 和 /bin/crontab $ diff /usr/bin/crontab /bin/crontab $diff 发现这两个文件并无区…

一、docker及mysql基本语法

文章目录 一、docker相关命令二、mysql相关命令 一、docker相关命令 &#xff08;1&#xff09;拉取镜像&#xff1a;docker pull <镜像ID/image> &#xff08;2&#xff09;查看当前docker中的镜像&#xff1a;docker images &#xff08;3&#xff09;删除镜像&#x…

JavaScript 快速入门手册

本篇文章学习&#xff1a; 菜鸟教程、尚硅谷。 JavaScript 快速入门手册 &#x1f4af; 前言&#xff1a; 本人目前算是一个Java程序员&#xff0c;但是目前环境… ε(ο&#xff40;*))) 一言难尽啊&#xff0c;blog也好久好久没有更新了&#xff0c;一部分工作原因吧(外包真…

分组与引用:用正则实现更复杂的查找和替换操作

括号在正则中的功能就是用于分组。简单来理解就是&#xff0c;由多个元字符组成某个部分&#xff0c;应该被看成一个整体的时候&#xff0c;可以用括号括起来表示一个整体&#xff0c;这是括号的一个重要功能。其实用括号括起来还有另外一个作用&#xff0c;那就是“复用”。 …

sass笔记

声明变量 通过$标识符进行命名及引用混合器 类似vue中的函数 通过 mixin标识定义 include 标识调用& 父选择器标识extend 进行继承可嵌套可导入 通过 import 文件位置’ 、进行导入 <style> //1 声明变量 $name: 15px; $color: skyblue;mixin border-radius($num) {/…

iOS textView支持超链接跳转

将某些文字变成高量可以点击的超链接核心功能代码 attri.addAttribute(NSAttributedString.Key.link, value:NSURL.init(string: "dctt:p/userPrivacy.html")!, range: NSRange.init(location: s.count - 4, length: 4) )textView.linkTextAttributes [NSAttributed…

CSS3基础

CSS3在CSS2的基础上增加了很多功能&#xff0c;如圆角、多背景、透明度、阴影等&#xff0c;以帮助开发人员解决一些实际问题。 1、初次使用CSS 与HTML5一样&#xff0c;CSS3也是一种标识语言&#xff0c;可以使用任意文本编辑器编写代码。下面简单介绍CSS3的基本用法。 1.1…

SpringBoot集成Solr所遇问题

使用Solr所遇问题记录 Solr 页面创建core 错误信息&#xff1a; Error CREATEing SolrCore new_core: Unable to create core [new_core] Caused by: Multiple [schema.xml] fieldType registered to the same name: text_ik ignoring: text_ik{classorg.apache.solr.schema.T…

pdf 转 word

pdf 转 word 一、思路 直接调用LibreOffice 命令进行文档转换的命令行工具 使用的前系统中必须已经安装了 libreofficelibreoffice已翻译的用户界面语言包: 中文 (简体)libreoffice离线帮助文档: 中文 (简体)上传字体 重点&#xff1a;重点&#xff1a;重点&#xff1a; 亲…

flutter:webview_flutter和flutter_inappwebview的简单使用

前言 最近在研究如何在应用程序中嵌入Web视图&#xff0c;发现有两个库不错。 一个是官方维护、一个是第三方维护。因为没说特别的需求&#xff0c;就使用了官方库&#xff0c;实现一些简单功能是完全ok的 webview_flutter 不建议使用&#xff0c;因为效果不怎么样&#xf…

layui第三方组件cron的使用

1. 首先上代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>cron表达式生成</title><meta name"renderer" content"webkit" /><meta http-equiv"X-UA-Compatible" con…

网站老域名跳转到新域名有哪些方法?内网穿透内网主机让外网访问

在网站服务器变更及本地主机搭建时&#xff0c;我们经常会遇到老域名地址跳转到新URL的配置&#xff0c;一些朋友还会面对无公网IP让外网访问的问题。今天我们来了解下网站老域名跳转到新域名有哪些方法&#xff0c;以及如何通过内网穿透实现内网主机让外网访问。 网站老域名跳…

js ajax 国内快速 映像

ajax 快速 映像 https://www.bootcdn.cn/ axios入门和axios基本请求方式 https://blog.csdn.net/m0_68997646/article/details/127438174 使用 jsDelivr CDN: <script src"https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>因为我们国…

关于vant2 组件van-dropdown-item,在IOS手机上,特定条件下无法点击问题的探讨

情景重现 先贴有问题的代码 <template><div :class"showBar ? homeContain : homeContain-nobar"><div class"contant" id"content"><van-dialog v-model"loading" :before-close"onBeforeClose" :…

git merge规则

参考文档&#xff1a;https://juejin.cn/post/7129333439299321887 丹尼尔&#xff1a;Hi&#xff0c;蛋兄&#xff0c;周杰伦都出新专辑了&#xff0c;你咋还不更新啊&#xff0c;真的打算半年一更啊&#xff1f; 蛋先生&#xff1a;好像确实是这样&#xff0c;要不&#xff0…

【golang】通道(channel)的基本原理(二)

我们在说"通道"一般指的都是双向通道&#xff0c;即&#xff1a;既可以发也可以收的通道。 而单向通道就是&#xff0c;只能发不能收&#xff0c;或者只能收不能发的通道。一个通道是双向还是单向的是由它的类型字面量决定的。 比如&#xff1a; var uselessChan …

不要着急购买iPhone 15,先看看这5点再做决定吧!

人们对下个月可能推出的iPhone 15感到兴奋,这是有充分理由的——有传言称,新机型正在做出一些重大改变,尤其是在iPhone 15 Pro机型方面。从四款新iPhone都采用USB-C,到iPhone 15 Pro Max采用潜望镜式长焦镜头以实现更好的变焦,听起来有很多功能值得兴奋。 当然,除非你没…

OpenCV图片校正

OpenCV图片校正 背景几种校正方法1.傅里叶变换 霍夫变换 直线 角度 旋转3.四点透视 角度 旋转4.检测矩形轮廓 角度 旋转参考 背景 遇到偏的图片想要校正成水平或者垂直的。 几种校正方法 对于倾斜的图片通过矫正可以得到水平的图片。一般有如下几种基于opencv的组合方…

探索Chevereto图床:使用Docker Compose快速搭建个人图床

家人们!图片在今天的社交媒体、博客和论坛中扮演着至关重要的角色。然而&#xff0c;随着图片数量的增加&#xff0c;寻找一个可靠的图片托管解决方案变得越来越重要。Chevereto图床是一个备受赞誉的解决方案&#xff0c;而使用Docker Compose搭建它更是一种高效、可维护的方法…