参考

//# 给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. jmeter分布式压力测试配置操作

    前提准备条件:1.主控机一台为master,ip地址:10.8.88.1772.负载机一台为slave, ip地址:10.8.88.1193.主控机和负载机都安装一样的JDK环境和jmeter版本.5 ...

  2. 取出List<Map<String,Object>>里面Map的key:value值

    1.取出Map其中一个属性的值 Map map = new HashMap(); map.put("key1", "value1"); map.put(&quo ...

  3. 关于Http协议与TCP协议的一些简单理解

    TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通 ...

  4. [Python] Codecombat攻略 远边的森林 Forest (1-40关)

    首页:https://cn.codecombat.com/play语言:Python 第二界面:远边的森林Forest(40关)时间:2-6小时内容:if/else.关系操作符.对象属性.处理输入网页 ...

  5. ubuntu系统---ubuntu16.04 + virtualenv + py2.7 + tf1.5.0 + keras2.2.4 + opencv2.4.9 +Numpy1.14

    ubuntu16.04 + virtualenv + py2.7 + tf1.5.0 + keras2.2.4 + opencv2.4.9 +Numpy1.14 @https://www.liaoxu ...

  6. Leet爬楼梯问题

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ...

  7. 内网端口映射+dnslog

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

  8. 一步一步学会preload和prefetch

    preload和prefetch是什么? 我们常说的preload和prefetch,是link标签rel里新增的两种值,用于让浏览器提前加载指定的资源,它们会先被缓存(属于http cache缓存) ...

  9. HDU 6150 - Vertex Cover | 2017 中国大学生程序设计竞赛 - 网络选拔赛

    思路来自 ICPCCamp /* HDU 6150 - Vertex Cover [ 构造 ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 题意: 给了你一个贪心法找最小覆盖的算法,构造一组 ...

  10. BZOJ 3679 数字之积 数位DP

    思路:数位DP 提交:\(2\)次 错因:进行下一层\(dfs\)时的状态转移出错 题解: 还是记忆化搜索就行,但是要用\(map\)记忆化. 见代码 #include<cstdio> # ...