参考

//# 给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. MySQL之字符函数

    MySql中提供一些函数对我们的开发有很多的帮助,下面就把MysQL提供的一些常用函数整理下,首先是字符处理函数: 1.CONCAT() 用法:字符串链接函数,将字符串字段连结在一块 举例: sele ...

  2. 利用jenkens+github实现简单的CI/CD

    一  获取github accessToken 依次点击 settings----> Developer settings --->Personal access tokens  到这里如 ...

  3. storm连接http需要的jar包

    将httpclient-4.5.6.jar  httpcore-4.4.10.jar这两个jar包拷贝到storm安装目录下的lib目录下 如果是集群的话,需要拷贝到集群中的每台机器上

  4. vba代码阅读

    #If Vba7 Then #如果是运行在64位office上 Declare PtrSafe Sub...#Else #如果是运行在32位office上 Declare Sub...#EndIf 在 ...

  5. win10+CPU+Python3.6下安装pytorch

    - 写在前面 最近,学习之余,想继续搞以前的深度学习.虽然电脑上已经安装配置好tensorflow,但是鉴于其学习难度较高,且我是一个忠实的Pythoner(爱所有Python化的东西),因此果断入坑 ...

  6. 目标检测---搬砖一个ALPR自动车牌识别的环境

    目标检测---搬砖一个ALPR自动车牌识别的环境 参考License Plate Detection and Recognition in Unconstrained Scenarios@https: ...

  7. flask参数传递

    一. 参数传递两种方式: 1.get请求 request.args.get("key") 获取get请求参数 2.post请求request.form.get("key& ...

  8. Java常用数学类和BigDecimal

    笔记: Math类 * java.lang.Math提供了一系列静态方法用于科学计算:其方法的参数和返回值类型一般为double型. * abs 绝对值 * acos,asin,atan,cos,si ...

  9. JAVA遇见HTML——JSP篇:JavaBeans

    Javabeans简介 Javabeans就是符合某种特定的规范的java类.使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性. Javabean的设计原 ...

  10. Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>

    引言 前面讲了运算符,这里主要对Lua的数据处理相关的数据类型和函数库进行总结归纳,后面会再接着单独分开讲解具体使用. 首先因为Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值. 值可以存储 ...