[drf]model设置
//# 给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设置的更多相关文章
- MVC5中Model设置属性注解
ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数 ...
- 数据模型model设置、生成数据迁移文件、执行数据迁移文件
一.model的配置 1.创建数据库 2.安装pymysql 3.修改配置文件 数据库连接配置 DATABASES = {'default': {'ENGINE': 'django.db.backen ...
- django为model设置表名
class redis_data(models.Model): class Meta: db_table='redis_data' key=models.CharFie ...
- 【再探backbone 01】模型-Model
前言 点保存时候不注意发出来了,有需要的朋友将就看吧,还在更新...... 几个月前学习了一下backbone,这段时间也用了下,感觉之前对backbone的学习很是基础,前几天有个园友问我如何将路由 ...
- Django基础——Model篇(二)
一 Model连表关系 一对多:models.ForeignKey(其他表) 多对多:models.ManyToManyField(其他表) 一对一:models.OneToOneFiel ...
- QTableView表格视图的列宽设置
Qt中的表格控件可以通过从QTableView或QTableWidget派生子类实现.其中,QTableWidget只是对QTableView的一种简单封装.因为使用QTableView常常需要用户指 ...
- 【model模型传入view的数据类型错误】传入字典的模型项的类型为“System.Data.Entity.Infrastructure.DbQuery`1[MapScience.PovertyAlleviation.Web.Models.Qu
出现这个问题的原因是控制器中传给view的数据类型与View中设置的model类型不一致导致,比如控制器返回的IList类型的,而你在View里面model设置的是IEnumerable<> ...
- Django学习之四:Django Model模块
目录 Django Model 模型 MODEL需要在脑子里记住的基础概念 区分清楚,必须不能混淆的 class Meta 内嵌元数据定义类 简单model创建实例 数据源配置 接着通过models在 ...
- mysql 开发基础系列22 SQL Model
一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql model 定义了mysql应用支持的sql语法,数据校验等,这样更容易在不同的环境中使用mysql. sql ...
随机推荐
- MySQL之字符函数
MySql中提供一些函数对我们的开发有很多的帮助,下面就把MysQL提供的一些常用函数整理下,首先是字符处理函数: 1.CONCAT() 用法:字符串链接函数,将字符串字段连结在一块 举例: sele ...
- 利用jenkens+github实现简单的CI/CD
一 获取github accessToken 依次点击 settings----> Developer settings --->Personal access tokens 到这里如 ...
- storm连接http需要的jar包
将httpclient-4.5.6.jar httpcore-4.4.10.jar这两个jar包拷贝到storm安装目录下的lib目录下 如果是集群的话,需要拷贝到集群中的每台机器上
- vba代码阅读
#If Vba7 Then #如果是运行在64位office上 Declare PtrSafe Sub...#Else #如果是运行在32位office上 Declare Sub...#EndIf 在 ...
- win10+CPU+Python3.6下安装pytorch
- 写在前面 最近,学习之余,想继续搞以前的深度学习.虽然电脑上已经安装配置好tensorflow,但是鉴于其学习难度较高,且我是一个忠实的Pythoner(爱所有Python化的东西),因此果断入坑 ...
- 目标检测---搬砖一个ALPR自动车牌识别的环境
目标检测---搬砖一个ALPR自动车牌识别的环境 参考License Plate Detection and Recognition in Unconstrained Scenarios@https: ...
- flask参数传递
一. 参数传递两种方式: 1.get请求 request.args.get("key") 获取get请求参数 2.post请求request.form.get("key& ...
- Java常用数学类和BigDecimal
笔记: Math类 * java.lang.Math提供了一系列静态方法用于科学计算:其方法的参数和返回值类型一般为double型. * abs 绝对值 * acos,asin,atan,cos,si ...
- JAVA遇见HTML——JSP篇:JavaBeans
Javabeans简介 Javabeans就是符合某种特定的规范的java类.使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性. Javabean的设计原 ...
- Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>
引言 前面讲了运算符,这里主要对Lua的数据处理相关的数据类型和函数库进行总结归纳,后面会再接着单独分开讲解具体使用. 首先因为Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值. 值可以存储 ...