当前位置

qyt的博客

Django REST framework serializer 跟 model 无关的只写(write_only) field 的处理

有时候想在 DRF 的 api 里塞一些跟 model 无关的,但又是必须要处理的数据,比如设密码时,为了保证输入无误第二次输入的 password,这种信息一般设为只写。
这个时候 serializers.py 里,把 validate 方法重载一下,在里面删掉 request.data 里实际上 model 不需要的数据就 ok 了。

  1. class AccountListSerializer(serializers.HyperlinkedModelSerializer):
  2.     password = serializers.CharField(write_only=True, style={'input_type': 'password'})
  3.     confirm_password = serializers.CharField(write_only=True, style={'input_type': 'password'})
  4.     def validate(self, data):
  5.         del data['confirm_password']
  6.         return data
  7.     class Meta:
  8.         model = Account
  9.         fields = ('password', 'confirm_password')

当然,在 views.py 里,需要校验一下 password 和 confirm_password 是否输入了,如果输入了,是否一致

  1. if not request.data.get('password') or not request.data.get('confirm_password'):
  2.     raise serializers.ValidationError("Please input password and confirm it!")
  3. if request.data.get('password') != request.data.get('confirm_password'):
  4.     raise serializers.ValidationError("Passwords do NOT match!")
Topic: 

Django REST framework serializer 跟 model 无关的只读(read_only)field 的处理

有时候想在 DRF 的 api 里塞一些跟 model 无关的信息,比如一些提示的信息,这种信息本身跟业务没有关系,设为只读。
这个时候 serializers.py 里:

  1. class FooSerializer(serializers.HyperlinkedModelSerializer):
  2.     foo = serializers.CharField(read_only=True)
  3.     tips = serializers.CharField(source='get_tips', read_only=True)
  4.     class Meta:
  5.         model = Foo
  6.         fields = ('foo', 'tips')

这个时候 models.py 里:

  1. class Foo(models.Model):
  2.     foo_id = models.AutoField(primary_key=True)
  3.     foo = models.CharField(max_length=128)
  4.     def get_tips(self):
  5.         return 'Please foo bar.’
  6.     class Meta:
  7.         db_table = 'foo'
Topic: 

dup2.com 上线邮件组功能

邮件组的可投递级别分为 4 个级别:
0 - 无限制(任何人都能往邮件组发信)
1 - 同一域名内的 email 地址和白名单中的 email 地址可以往邮件组发信
2 - 邮件组内 email 地址和白名单中的 email 地址可以往邮件组发信
3 - 仅白名单中的 email 地址可以往邮件组发信

Topic: 

兑换港服 12 个月 xbox live 金会员卡出现的问题及解决

首先如果你的 live 帐号是新注册的,而且注册时就注册在香港,那就没什么事了,兑换时应该会很顺利。

我的 live 帐号(hotmail 信箱)注册了十几年了,注册时选择的肯定是中国。前段时间买了韩版 xbox one,用 xbox live 时只是去 xbox HongKong 的网站上用我的 live 帐号登录建立了一个 profile,然后 xbox one 主机设置选择繁体中文、香港,使用时一切正常。后来绑定了信用卡(在 live 网站 上绑定信用卡时先选择香港特别行政区再选择信用卡,然后随便填写香港地址及 8 位电话号码),也成功地游戏内付费了一次。

在淘宝上买了一张 12 个月港服金会员卡,昨天兑换时总是发生问题,提示让我稍后再试。找了在线客服人员,他告诉我 xbox live 帐号必须是香港的才行,我由于注册的是大陆的 live,必须换服。于是按他要求,更改 xbox live 账单地址(其实绑定信用卡时就已经填的香港的了,所以地址没有改,但是按客服要求,姓名改成拼音),然后 xbox live 再换到香港服务区。换服务区成功后,再兑换金会员,就 ok 了。

Topic: 

推推上幼儿园第二天

话说昨天我跟他妈一起去送,在 byebye 时,眼里闪过一丝慌乱,没见到掉眼泪。中午回家就说明天不去幼儿园了。

到了晚上,说爸爸明天送你上幼儿园,也没啥反应,好像忘了中午说的“气话”。

今天早上,送去上幼儿园的过程中情绪很好,到幼儿园园门口,还突然大叫一声:

“学校我来啦!”

只是到班级门口说 byebye 时,听到其他小朋友在哭才被带动得开始哭。

中午打电话询问,据接他的爷爷说,老师说表现很好,可以不用只上半天,可以上一整天了。

Topic: 

我处心积虑地想干一件事,结果……

我处心积虑地想干一件事,结果失败了。

事情是这样的,我前段时间偶然发现中纪委官网有个案件查处网页,上面经常登些小老虎大苍蝇被查处的信息,什么徐才厚啊,万庆良啊。我想大老虎还在后面呢,我写个自动发 tweet 发微博的机器人,争取第一个在推特和新浪微博里报道。

结——果,竟然新华社出老千先报道了周永康被查处,导致我的愿望没有达成。当然事实是即使是我第一个报道也没什么作用,因为,嘿嘿,粉丝太少(羞愧中,不过这家伙确实比我预料得更早地被公布,喂,多给我点时间让我做做推广呗)。所以请大家看到的捧个场,没事关注一下我,碰到小老虎级别的帮忙转发扩散一下,多谢多谢。

推特:@ccdiajcc;新浪微博:@ccdiajcc

新浪微博没敢起中文名,怕被管理员秒删。

Topic: 

共赴国难宣言

看到新闻说台湾前行政院长郝柏村周一(7月7日卢沟桥事变77周年纪念日)在北京参观中国人民抗日战争纪念馆,当面指责中国大陆方未呈现当时历史文献「共赴国难宣言」,对国民党军队不公。

我对此感到很好奇,很想看看当时国民党到底说了什么。找了一下这个「共赴国难宣言」,结果发现这个「共赴国难宣言」不是国民党说的。原文如下:

亲爱的同胞们:

中国共产党中央委员会谨以极大的热忱向我全国父老兄弟诸姑姊妹宣言,当此国难极端严重民族生命存亡绝续之时,我们为著挽救祖国的危亡,在和平统一团结御侮的基础上,已经与中国国民党获得了谅解,而共赴国难了。这对於我们伟大的中华民族前途有着怎样重大的意义啊!因为大家都知道,在民族生命危急万状的现在,只有我们民族内部的团结,才能战胜日本帝国主义的侵略。现在民族团结的基础已经定下了,我们民族独立自由解放的前提也已创设了,中共中央特为我们民族的光明灿烂的前途庆贺。

不过我们知道,要把这个民族的光辉前途变为现实的独立自由幸福的新中国,仍需要全国同胞,每一个热血的炎黄子孙,坚忍不拔地努力奋斗。中国共产党愿当此时机,向全国同胞提出我们奋斗之总的目标,这就是:

(一)争取中华民族之独立自由与解放。首先须切实地迅速地准备与发动民族革命抗战,以收复失地和恢复领土主权之完整。

(二)实现民权政治,召开国民大会,以制定宪法与规定救国方针。

(三)实现中国人民之幸福与愉快的生活。首先须切实救济灾荒,安定民生,发展国防经济,解除人民痛苦与改善人民生活。

凡此诸项,均为中国的急需,以此悬为奋斗之鹄的,我们相信必能获得全国同胞之热烈的赞助。中共愿在这个总纲领的目标下,与全国同胞手携手地一致努力。

中共深切知道,在实现这个崇高目标的前进路上,须要克服许多的障碍和困难,首先将遇到日本帝国主义的阻碍和破坏。为著取消敌人的阴谋之借口,为著解除一切善意的怀疑者之误会,中国共产党中央委员会,有披沥自己对於民族解放事业的赤忱之必要。因此,中共中央再郑重向全国宣言:

一、孙中山先生的三民主义为中国今日之必需,本党愿为其彻底的实现而奋斗。

二、取消一切推翻国民党政权的暴动政策及赤化运动,停止以暴力没收地主土地的政策。

三、取消现在的苏维埃政府,实行民权政治,以期全国政权之统一。

四、取消红军名义及番号,改编为国民革命军,受国民政府军事委员会之统辖,并待命出动,担任抗日前线之职责。

亲爱的同胞们!本党这种光明磊落大公无私与委曲求全的态度,早已向全国同胞在言论行动上明白表示出来,并且已获得同胞们的赞许。现在为求得与国民党的精诚团结,巩固全国的和平统一,实行抗日的民族革命战争,我们准备把这些诺言中在形式上尚未实行的部分,如苏区取消,红军改编等,立即实行,以便用统一团结的全国力量,抵抗外敌的侵略。

寇深矣!祸亟矣!同胞们,起来,一致的团结啊!我们伟大的悠久的中华民族是不可屈服的。起来,为巩固民族的团结而奋斗!为推翻日本帝国主义的压迫而奋斗!胜利是属於中华民族的!抗日战争胜利万岁!

独立自由幸福的新中国万岁!

有人对此有自己的见解
《民法通则》第58条规定:一方以欺诈、胁迫的手段或者乘人之危,使对方在违背真实意思的情况下所为的,属于无效的民事行为,从行为开始起就没有法律约束力。 对方如果起诉,可以举证该欠条是在受胁迫的情况下写的,以此来对抗对方的诉讼请求,法院认定这张欠条是无效的,那么您就不承担民事责任。

Topic: 

解决 Windows Server 2008 R2 上 gem install mysql2 时 collect2: ld returned 1 exit status

在 Windows Server 2008 R2 上安装 redmine 前要安装一堆依赖。

按照Redmine 安装笔记这篇网志里的步骤:

运行 bundle install --without development test rmagick 时报 undefined method `[]' for nil:NilClass (NoMethodError) 的错。

经查找,从 http://stackoverflow.com/questions/19014117/ruby-mysql2-gem-installation-on-windows-7 得知,需要下载 MySQL Connector C,然后解压到 C:\mysql-connector,再运行 gem install mysql2 --platform=ruby -- '--with-mysql-lib="C:\mysql-connector\lib" --with-mysql-include="C:\mysql-connector\include" --with-mysql-dir="C:\mysql-connector"'

运行后,又报了 collect2: ld returned 1 exit status 的错。

经查找,从 http://www.websofia.com/2011/08/installing-rubys-mysql2-gem-for-mysql-64-bits/ 这里得出是因为需要用 32 位的 MySQL Connector C。

重新去 http://dev.mysql.com/downloads/connector/c 下载 32 位 的 zip 包,解开,把 libmysql.dll 拷贝出来,替换掉 Ruby 里那个,删掉原来的 C:\mysql-connector,把这个 32 位的 zip 包解在 C:\mysql-connector 里,再执行刚才的命令。成功!

Topic: 

解决 scm-server 安装后不能在服务里启动

按照Windows下配置Git服务器和客户端里面说的,在 Windows Server 2008 R2 下面安装 scm-server,运行 scm-server.bat install 后,在 Windows 服务里尝试启动服务,报 the system cannot find the file specified。

搜了一下,按照 https://bitbucket.org/sdorra/scm-manager/issue/74/windows-service 这个里面的说法,先 scm-server.bat uninstall,然后用 Run as administrator 的方式启动命令行窗口,然后再运行 scm-server.bat install,然后就可以在 Windows 的 Services 里启动 scm-server 了。

Topic: 
订阅 RSS - qyt的博客