django其他操作

目录

1,发送邮件

2,分页器

3,站点地图

4,RSS订阅功能

5,自定义上下文处理器

发送邮件

django提供了一个发送邮件的接口,相比python的smtplib库,发送的速度更快。

settings.py文件配置

# settings.py
EMAIL_USER_SSL = True
EMAIL_HOST = "smtp.qq.com"
EMAIL_PORT = 25               # 端口
EMAIL_HOST_USER = '1904981400@qq.com'                       # 写自己的发送邮件的账号
EMAIL_HOST_PASSWORD = 'rvgenfvumbcncgia'   # 写自己的授权码
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

授权码的获取方式:https://zhidao.baidu.com/question/878811848141402332.html

python3 manage.py sendtestemail 1904981400@qq.com

如果收到邮件,则代表配置没问题。

发送一封邮件

from django.core.mail import send_mail
from testblog.settings import DEFAULT_FROM_EMAIL

email_title = "注册验证码"
email_body = "您的验证码为1543。"
email_to = 'catfish1921@outlook.com'    # 写你要发送的对象
send_status = send_mail(email_title, email_body, DEFAULT_FROM_EMAIL, [email_to], fail_silently=False)

如果send_status返回1,则发送成功,否则发送失败。

一次性发送多封邮件

from django.core.mail import send_mass_mail

message1 = ('caption1', 'content1', '1904981400@qq.com', 'catfish1921@outlook.com')
message2 = ('caption2', 'content2', '1904981400@qq.com', 'catfish1921@outlook.com')

send_mass_mail((message1,message2),failsilently=False)

发送复杂邮件

如果要发送复杂邮件,就需要使用EmailMultiAlternatives类。使用这个类,可以发送html格式的超文本,也可以添加附件到其中。

from django.core.mail import EmailMultiAlternatives
msg = EmailMultiAlternatives('这是一封带有附件的消息', '<p>这是消息的内容</p>', DEFAULT_FROM_EMAIL, [email_to])

msg.content_subtype = 'html'   # 默认为plain,即纯文本
msg.attach_file('/home/catfish/桌面/点赞')                # 添加附件,可以选择是否添加
msg.send()

在服务器上无法发送邮件

原文:https://www.cnblogs.com/ssjt/articles/10540593.html

更改服务器端口EMAIL_PORT为465,然后添加如下两行代码:

EMAIL_USE_SSL = True
CONFIRM_DAYS=2

django分页器

django内置分页器的使用如下:

from django.core.paginator import Paginator

p = Paginator(objects, 2)   # 分页器对象

## 分页器对象的方法
'''
count   总数
num_pages  总页数
page_range    页数范围
page(num)     获得第几页实例
'''

## 每一页对象
'''
object_list   这一页中的所有对象
has_previous()    前面是否有页数
has_next()        后面是否有页数
next_page_number() 获取上一页页码
previous_page_number() 获取下一页页码
'''

Copy

django站点地图

在INSTALL_APP中注册

'django.contrib.sitemaps',

Copy

注意:这里只添加django.contrib.sitemaps,如果多添加了一个django.contrib.sites会报错:Site matching query does not exist.

编辑urls.py文件

# urls.py文件
from django.contrib.sitemaps import GenericSitemap
from django.contrib.sitemaps.views import sitemap

from blog.models import Blog

sitemaps = {
    'blog': GenericSitemap({'queryset': Blog.objects.all(), 'date_field': 'date'}, priority=0.6),
}
patterns = [
    path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
]

Copy

好了,站点地图就完成了!

踩坑:'Blog' object has no attribute 'get_absolute_url'
解决方法:在models.py的相关类中定义一个get_absolute_url方法,并返回相关url链接。

RSS订阅

出自:https://blog.csdn.net/jiangxfone/article/details/90549587

第一步:在你要定义的应用下新建feed.py文件,然后写入:

from django.contrib.syndication.views import Feed
from django.shortcuts import reverse
from blog.models import Blog

class BlogFeed(Feed):
	title = 'catfish的个人博客'
	description = '一个用来分享知识的个人博客'
	link = "/"

	def items(self):
		return  Blog.objects.all()

	def item_title(self, item):
		return item.title

	def item_description(self, item):
		return item.content

	def item_link(self, item):
		return reverse('blog:article', args=(item.id,))

Copy

然后在urls.py中绑定:

from blog import feed

urlpatterns = [
    path('rss/', feed.BlogFeed(), name='rss'),
]

Copy

完毕!

自定义上下文处理器

如果有些数据希望全局都能使用可以使用上下文管理器。使用方法如下:

第一步:在app中创建一个文件,文件名自己定,我演示的这个app名叫blog,文件名为context_processors.py。

第二步:在context_processors.py文件中添加如下代码:

def youknow(request):
    context = {}
    context['one'] = 'hello world!'
    return context

Copy

第三步:在settings.py文件中配置相关文件:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',

                'blog.context_processors.youknow',
            ],
        },
    },
]

Copy

第四步,在模板中使用。

{{ one }}

Copy

如果显示"hello world!",则定义成功!

posted @ 2020-09-27 14:30  小默同学  阅读(107)  评论(0编辑  收藏  举报