参考

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

参考

  1. // get_FIELD_display
  2. class Person(models.Model):
  3. SHIRT_SIZES = (
  4. ('S', 'Small'),
  5. ('M', 'Medium'),
  6. ('L', 'Large'),
  7. )
  8. name = models.CharField(max_length=60)
  9. shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)
  10. >>> p = Person(name="Fred Flintstone", shirt_size="L")
  11. >>> p.save()
  12. >>> p.shirt_size
  13. 'L'
  14. >>> p.get_shirt_size_display()
  15. 'Large'
  16. # 注: 这个字段在drf里是不会被序列化,不生效
  1. //增加一个字段属性(上面例子的本质)
  2. class CeleryExampleResult(models.Model):
  3. task_id = models.BigIntegerField(default=0)
  4. task_instance_id = models.BigIntegerField()
  5. create_user = models.CharField(max_length=128, verbose_name="创建者", help_text="创建者")
  6. create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
  7. update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
  8. @property
  9. def get_task_id_display(self):
  10. return "hello world, %s" % self.task_id
  11. # 注: 这个字段在drf里是不会被序列化,不生效
  1. //设计到数据是否存在, 数据逻辑处理, 可以将方法放到对应的models类中
  2. class User(models.Model):
  3. email = models.EmailField(max_length=32, null=False, default="", unique=True)
  4. login_code = models.CharField(max_length=8, null=False, default="")
  5. login_code_created_time = models.DateTimeField(null=True)
  6. last_login_time = models.DateTimeField(null=True)
  7. @classmethod
  8. def create_login_code(cls, email):
  9. '''用户信息记录,验证码生成,发送邮件'''
  10. if email != "":
  11. user = None
  12. # 获取用户信息,若以前注册过则获取,否则创建用户信息
  13. try:
  14. user = User.objects.get(email=email)
  15. except ObjectDoesNotExist as e:
  16. user = User()
  17. user.email = email
  18. user.login_code = ""
  19. # 生成验证码并发送邮件
  20. if user.login_code == "" or user.login_code_created_time is None \
  21. or timezone.now() - user.login_code_created_time > timedelta(minutes=5):
  22. #生成验证码
  23. user.login_code = ''.join(random.sample(string.digits + string.ascii_letters, 6))
  24. user.login_code_created_time = timezone.now()
  25. try:
  26. #发送验证码给用户
  27. send_mail(
  28. '[webchat]登陆验证码',
  29. '请使用验证码 {0} 进行登陆,有效时间5分钟'.format(user.login_code),
  30. settings.EMAIL_FROM,
  31. [email],
  32. fail_silently=False,
  33. )
  34. except smtplib.SMTPException as e:
  35. return False
  36. else:
  37. # 记录验证码到数据库
  38. user.save()
  39. return True
  40. return True
  41. return False
  42. @classmethod
  43. def login(cls, email, login_code):
  44. '''登陆验证'''
  45. try:
  46. #获取用户
  47. user = User.objects.get(email=email)
  48. # 验证邮箱,验证码是否正确,同时验证验证码有效时间
  49. if email != "" and login_code != "" \
  50. and user.login_code_created_time \
  51. and login_code.lower() == user.login_code.lower() \
  52. and timezone.now() - user.login_code_created_time < timedelta(minutes=5):
  53. # 更新数据库记录
  54. user.login_code = ""
  55. user.last_login_time = timezone.now()
  56. user.save()
  57. return user
  58. return None
  59. except ObjectDoesNotExist as e:
  60. return None
  61. def __str__(self):
  62. return '{0}'.format(self.email)
  63. //调用
  64. 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. 6.NIO2-Path、Paths、Files

    NIO.2 jdk1.7中,java对 NIO 极大的扩展,主要增强的是对文件处理 和 文件系统特性的支持 关于其中一些API的使用 public class TestNIO_2_Path_File ...

  2. CentOS7安装CDH 第五章:CDH的安装和部署-CDH5.7.0

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  3. SQL Server CET 通用表表达式 之 精典递归

    SQL2005 Common Table Expressions(CET)即通用表表达式. SQLSERVER CET递归使用案例: 1.普通案例 表结构如下:   ;WITH cet_depart ...

  4. selenium 模拟键盘事件 复制粘贴、右键、回车等

    #coding=utf-8 ''' selenium ''' from selenium import webdriver as wd import time bc=wd.Chrome(executa ...

  5. TCP/UDP Socket调试工具提供了TCP Server,TCP Client,UDP Server,UDP Client,UDP Group 五种Socket调试方案。

    一.TCP通信测试: 1)   创建TCP Server: 选中左方的TCP Server, 然后点击”创建”按钮,软件弹出监听端口输入框 输入监听端口后,即创建了一个在指定端口上进行监听的TCP S ...

  6. 深入理解flex布局的flex-grow、flex-shrink、flex-basis

    flex-basis用来设置初始的宽度(或者高度),优先级高于width flex-grow用来设置flex容器内 当还有剩余宽度(或高度)时, 子元素的缩放比例. 同理 flex-shrink 用来 ...

  7. 前端笔记-dom

    dom(document object model) -文档对象模型,包含整个页面所有功能,可以通过调用方法的形式来操作页面,所以js和dom结合在一起可以写一些逻辑性的语言 dom的对象 dom有5 ...

  8. 如何查看JVM的内存

    学过java的人都知道,jvm是解释运行java的,java能够作为跨平台语言,也是因为jvm的存在,合理的使用jvm内存可以帮助程序很好的运行.那么,怎么查看jvm的内存使用情况呢,下面本文介绍一下 ...

  9. idea 查看类继承关系的快捷键

    类似eclipse ctrl+t的快捷键,idea中是ctrl+H

  10. 一款超好用的第三方评论插件--Gittalk

    使用GITALK的背景: 1. 最近在做一个基于Java的个人博客系统,已经基本完工了,突然发现怎么没有评论的操作,如果再从头开始从数据库开始写的话,花费的代价有点大,于是乎我就在网上寻找一款适合我的 ...