pycharm+Django中级项目

之前写了一个初级的项目,很详细了,应该都能看得懂,学得会,这里进阶一下操作。
这里我们创建一个发布文章需要邮件审核的项目,架构如下:
在这里插入图片描述
我们的项目名称是TweetApprover,由于需要两种用户,一种发布者,一种审核者,所以创建两个app,一个poster,一个approver

1、创建项目目录

我们先是常规pycharm创建项目,自动生成一个Django框架,接下来生成两个app,使用:

python manage.py startapp poster
python manage.py startapp approver
然后目录结构如下:

在这里插入图片描述

接下来先来一个测试功能,因为我们要用到邮件,所以写一个django发送邮件的功能
现在settings.py中增加下列设置:

EMAIL_HOST = 'smtp.qq.com'   #邮箱的smtp服务器地址
EMAIL_PORT = 25			#端口
EMAIL_HOST_USER = '*@qq.com'      #使用者邮箱
EMAIL_HOST_PASSWORD = 'txcickyfxqkjfeea'     #第三方授权码
EMAIL_USE_TLS = False                 # 与SMTP服务器通信时,是否启动TLS链接(安全链接)。
EMAIL_FROM = '*@qq.com'            #发送者邮箱,就是发送者

这里的第三方授权码是邮箱里面获取的,必须打开stmp模式的开关,在邮箱的设置里面

接下里是我们的manage.py内容,只是测试代码,添加没有的几行而已

from TweetApprover.settings import EMAIL_FROM
from django.core.mail import send_mail

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "TweetApprover.settings")
    email_title = 'this is title'
    email_body = 'this is content'
    send_status = send_mail(email_title, email_body, EMAIL_FROM, ['994894722@qq.com'])

这里测试的是用自己的邮箱发送给994894722@qq.com这个用户一个邮件,内容很简单,关键就是那个授权码,记住password不是密码是授权码,这个最重要,不然会出现类似错误:

smtplib.SMTPAuthenticationError: (535, b'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb\xb5\xc7\xc2\xbc\xa1\xa3\xcf\xea\xc7\xe9\xc7\xeb\xbf\xb4: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256')

2、创建models

我们现在数据库表中创建我们需要的表,任意一个app中创建model,这里我们写在poster下的models.py中:

 # -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models

class Tweet(models.Model):
    text = models.CharField(max_length=150)
    author_email = models.CharField(max_length=200)
    created_at = models.DateTimeField(auto_now_add=True)       #顾名思义,自动添加
    published_at = models.DateTimeField(null=True)
    STATE_CHOICES = (							#三种状态
        ('pending', 'pending'),
        ('published', 'published'),
        ('rejected', 'rejected'),
    )
    state = models.CharField(max_length=15, choices=STATE_CHOICES)

    def __unicode__(self):       #返回我们的每个对象的text属性
        return self.text

    class Meta:												#这是许可标签
        permissions = (
            ("can_approve_or_reject_tweet",
             "Can approve or reject tweets"),
        )


class Comment(models.Model):
    tweet = models.ForeignKey(Tweet)
    text = models.CharField(max_length=300)
    created_at = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return self.text

这里有个特别坑的地方,由于我们有两个app,所以在设置里面必须告诉系统我们的model

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值