参考

//# 给model添加虚拟字段

class CeleryExampleResult(models.Model):
task_id = models.BigIntegerField(default=0)
task_instance_id = models.BigIntegerField()
create_user = models.CharField(max_length=128, verbose_name="创建者", help_text="创建者")
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间") def _task_instance_url(self):
return "http://192.168.2.101/?taskInstanceList&appId=%s#taskInstanceId=%s" % (self.task_id, self.task_instance_id) task_instance_url = property(_task_instance_url) class Meta: # 注意,是模型的子类,要缩进!
# db_table = 'celery_example_result'
ordering = ["task_id"]
verbose_name = "CeleryExampleResult执行结果表"
verbose_name_plural = verbose_name # 注: 这个字段在drf里是不会被序列化,不生效

参考

// get_FIELD_display
class Person(models.Model):
SHIRT_SIZES = (
('S', 'Small'),
('M', 'Medium'),
('L', 'Large'),
)
name = models.CharField(max_length=60)
shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES) >>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large' # 注: 这个字段在drf里是不会被序列化,不生效
//增加一个字段属性(上面例子的本质)

class CeleryExampleResult(models.Model):
task_id = models.BigIntegerField(default=0)
task_instance_id = models.BigIntegerField()
create_user = models.CharField(max_length=128, verbose_name="创建者", help_text="创建者")
create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间") @property
def get_task_id_display(self):
return "hello world, %s" % self.task_id # 注: 这个字段在drf里是不会被序列化,不生效
//设计到数据是否存在, 数据逻辑处理, 可以将方法放到对应的models类中

class User(models.Model):
email = models.EmailField(max_length=32, null=False, default="", unique=True)
login_code = models.CharField(max_length=8, null=False, default="")
login_code_created_time = models.DateTimeField(null=True)
last_login_time = models.DateTimeField(null=True) @classmethod
def create_login_code(cls, email):
'''用户信息记录,验证码生成,发送邮件'''
if email != "":
user = None # 获取用户信息,若以前注册过则获取,否则创建用户信息
try:
user = User.objects.get(email=email)
except ObjectDoesNotExist as e:
user = User()
user.email = email
user.login_code = "" # 生成验证码并发送邮件
if user.login_code == "" or user.login_code_created_time is None \
or timezone.now() - user.login_code_created_time > timedelta(minutes=5): #生成验证码
user.login_code = ''.join(random.sample(string.digits + string.ascii_letters, 6))
user.login_code_created_time = timezone.now() try:
#发送验证码给用户
send_mail(
'[webchat]登陆验证码',
'请使用验证码 {0} 进行登陆,有效时间5分钟'.format(user.login_code),
settings.EMAIL_FROM,
[email],
fail_silently=False,
)
except smtplib.SMTPException as e:
return False
else:
# 记录验证码到数据库
user.save()
return True
return True
return False @classmethod
def login(cls, email, login_code):
'''登陆验证'''
try:
#获取用户
user = User.objects.get(email=email) # 验证邮箱,验证码是否正确,同时验证验证码有效时间
if email != "" and login_code != "" \
and user.login_code_created_time \
and login_code.lower() == user.login_code.lower() \
and timezone.now() - user.login_code_created_time < timedelta(minutes=5): # 更新数据库记录
user.login_code = ""
user.last_login_time = timezone.now()
user.save()
return user
return None
except ObjectDoesNotExist as e:
return None def __str__(self):
return '{0}'.format(self.email) //调用
code = 200 if User.create_login_code(email) else 400

[drf]model设置的更多相关文章

  1. MVC5中Model设置属性注解

    ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数 ...

  2. 数据模型model设置、生成数据迁移文件、执行数据迁移文件

    一.model的配置 1.创建数据库 2.安装pymysql 3.修改配置文件 数据库连接配置 DATABASES = {'default': {'ENGINE': 'django.db.backen ...

  3. django为model设置表名

    class redis_data(models.Model):     class Meta:         db_table='redis_data'     key=models.CharFie ...

  4. 【再探backbone 01】模型-Model

    前言 点保存时候不注意发出来了,有需要的朋友将就看吧,还在更新...... 几个月前学习了一下backbone,这段时间也用了下,感觉之前对backbone的学习很是基础,前几天有个园友问我如何将路由 ...

  5. Django基础——Model篇(二)

    一 Model连表关系 一对多:models.ForeignKey(其他表)    多对多:models.ManyToManyField(其他表)    一对一:models.OneToOneFiel ...

  6. QTableView表格视图的列宽设置

    Qt中的表格控件可以通过从QTableView或QTableWidget派生子类实现.其中,QTableWidget只是对QTableView的一种简单封装.因为使用QTableView常常需要用户指 ...

  7. 【model模型传入view的数据类型错误】传入字典的模型项的类型为“System.Data.Entity.Infrastructure.DbQuery`1[MapScience.PovertyAlleviation.Web.Models.Qu

    出现这个问题的原因是控制器中传给view的数据类型与View中设置的model类型不一致导致,比如控制器返回的IList类型的,而你在View里面model设置的是IEnumerable<> ...

  8. Django学习之四:Django Model模块

    目录 Django Model 模型 MODEL需要在脑子里记住的基础概念 区分清楚,必须不能混淆的 class Meta 内嵌元数据定义类 简单model创建实例 数据源配置 接着通过models在 ...

  9. mysql 开发基础系列22 SQL Model

    一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql model 定义了mysql应用支持的sql语法,数据校验等,这样更容易在不同的环境中使用mysql. sql ...

随机推荐

  1. XML文件解析之JDOM解析

    1.JDOM介绍 JDOM的官方网站是http://www.jdom.org/,JDOM解析用到的jar包可以在http://www.jdom.org/dist/binary/中下载,最新的JDOM2 ...

  2. 《数据结构与算法之美》 <05>链表(下):如何轻松写出正确的链表代码?

    想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转.有序链表合并等,写的时候非常容易出错.从我上百场面试的经验来看,能把“链表反转”这几行代码写对的人不足 10%. 为什么链表代 ...

  3. No result defined for action com.java.test.Action.HelloAction and result index

    Struts中配置action访问出错: Struts Problem Report Struts has detected an unhandled exception: Messages: No ...

  4. Ubuntu系统---开机总会显示错误报告处理

    Ubuntu系统---开机总会显示错误报告处理 使用ubuntu16.04,开机总会显示错误报告,略烦人,查找方法关闭.一.临时关闭sudo service apport stop(重启后失效) 二. ...

  5. 14、RALM: 实时 look-alike 算法在推荐系统中的应用

    转载:https://zhuanlan.zhihu.com/p/71951411 RALM: 实时 look-alike 算法在推荐系统中的应用 0. 导语 本论文题为<Real-time At ...

  6. Python自动化测试PO模式

    页面元素定位信息 页面元素定位信息文件 [leadscloud_login] input_user_name = xpath>//*[@id='main']/div/div[2]/div[2]/ ...

  7. Pycharm----设置背景颜色和字体的样式

    编辑器默认显示的样式背景为白色,看着会刺眼,也不方便查找我们写的某些参数等,通过设定,可以对页面的样式进行选择更改,方便直观的在编辑器中查看自己所写的代码, 设置前: 设置后 操作方式:

  8. 内网端口映射+dnslog

    以前的DNSLOG部署在公网上也即自己的服务器上,产品依赖个人的环境不是很好.于是做了修改. 框架 细节 1)A域名的域名服务器指向B域名 ns0.B.com ns1.B.com 2)B域名的两个ns ...

  9. C# 任务、线程、同步(五)

    1.数据流使用  TPL Data Flow 类库 class Program { static void Main(string[] args) { // ActionBlock(); // Sou ...

  10. python以下划线开头的变量和函数的作用

    在python中,我们经常能看到很多变量名以_下划线开头,而且下划线的数量还不一样,那么这些变量的作用到底是什么? 变量名分类: # 以数字.字母开头: 正常的公有变量名a = 1def aa(): ...