django项目实例精解(3)利用高级特性完善博客程序

本文介绍了如何利用Django的高级特性完善博客程序,包括通过电子邮件共享帖子的实现,构建评论系统,添加标签功能,以及根据相似性检索帖子。详细讲解了创建表单、处理视图、数据库迁移、创建模型、使用第三方插件django-taggit以及实现相关帖子推荐的过程。
摘要由CSDN通过智能技术生成

第二章内容:
利用django发送邮件
创建表单并在视图中加以处理
从模型中创建表单
整合第三方应用程序
构建复杂的QuerySet

2.1通过电子邮件共享帖子

针对帖子的邮件发送功能,需要执行以下操作:

  1. 创建用户表单,并填写名字,邮件,收件人,可选的备注功能。
  2. 在views.py文件中创建视图,并处理数据以及发送邮件.
  3. 在blog应用程序的urls.py文件中,针对新视图添加url路径。
  4. ’ 创建模板并显示表单。

django自带基类:Form,ModelForm
在blog目录下创建forms.py

from django import forms

class EmailPostForm(forms.Form):
    name = forms.CharField(max_length=25)
    email = forms.EmailField()
    to = forms.EmailField()
    comments = forms.CharField(required=False, widget=forms.Textarea)
    

setting中配置邮件参数:

# 发送邮件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# smpt服务地址
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT = 25   # 端口默认都是25不需要修改
# 发送邮件的邮箱,需要配置开通SMTP
EMAIL_HOST_USER = 'xxx@qq.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'xxx'
# 收件人看到的发件人
EMAIL_FROM = '带签名的<xxx@qq.com>'

views.py中处理表单:

def post_share(request, post_id):
    post = get_object_or_404(Post, id=post_id, status='published')
    sent = False
    if request.method == 'POST':
        form = EmailPostForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            post_url = request.build_absolute_uri(post.get_absolute_url())
            subject = '{} ({}) recommends you reading"{}"'.format(cd['name'], cd['email'], post.title)
            message = 'Read "{}" at {}\n\n{}\'s comments:{}'.format(post.title, post_url, cd['name'], cd['comments'])
            send_mail(subject, message, 'xxx@qq.com', [cd['to']])
            sent = True
    else:
        form = EmailPostForm()
    return render(request, 'blog/post/share.html', {
   "post": post, "form": form, 'sent': sent})

配置blog/urls.py:

path('<int:post_id>/share/', views.post_share, name='post_share'),

在blog/templates/blog/post 创建新文件,share.html,添加下面代码:

{
   % extends "blog/base.html" %}
{
   % block title %}share a post {
   % endblock %}
{
   % block content %}
{
   % if sent %}
<h1>E-mail successfully sent</h1>
<p>
    "{
   { post.title }}" was successfully sent to {
   {
    form.cleaned_data.to }}.
</p>
{
   % else %}
<h1>Share"{
   { post.title }}"by e-mail</h1>
<form action="." method=
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Scrapy和Django是两个常用的Python框架,分别用于网络爬虫和Web应用开发。在实际开发中,有时需要结合使用Scrapy和Django来完成一些复杂的项目需求。 Scrapy是一个功能强大的网络爬虫框架,它提供了一系列的API和工具,可以方便地进行网页数据的抓取和处理。而Django是一个优秀的Web开发框架,它提供了一系列的工具和功能,可以快速地构建出高性能、可扩展的Web应用。 在实际的项目中,可以使用Scrapy和Django进行数据的采集和存储。首先,使用Scrapy编写爬虫程序,定义好需要抓取的目标网页和数据解析规则,然后通过Scrapy的调度器和管道功能将抓取到的数据发送到Django的数据库中进行存储。 具体而言,可以在Scrapy的spider中使用Django的ORM来操作数据库,将抓取到的数据以Django模型的形式存储到数据库中。这样,就可以在爬虫程序利用Django的模型层来处理数据,包括数据的增删改查等操作。 另外,由于Scrapy和Django都是基于Python的框架,它们之间的集成也是非常简单方便的。可以通过在Django的视图函数中调用Scrapy的爬虫,来实现在Web应用中动态地抓取数据并展示给用户。 总之,通过结合使用Scrapy和Django,可以实现从网页数据的抓取到数据的存储和展示的全套解决方案。无论是对于爬虫开发还是Web应用开发,这一组合都是非常实用和高效的。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值