Python的Django中django-userena组件的简单使用教程


Posted in Python onMay 30, 2015

利用twitter/bootstrap,项目的基础模板算是顺利搞定。接下来开始处理用户中心。

用户中心主要包括用户登陆、注册以及头像等个人信息维护。此前,用户的注册管理我一直使用django-registration。只是这个APP有些不思进取,09年发布了0.8alpha版后就一直没什么动静。这次决定尝试另外一个用户模块组件django-userena。

相比django-registration,django-userena的功能要完善的多。除基础的登陆注册模块外django-userena甚至还带了站内消息功能。django-userena的易用性方面也做的非常的不错。django-userena自带了默认模板,并有提供一个完整的演示项目,让你可以轻松上手。这里有个官方的在线demo,感兴趣可以去看看。
django-userena同twitter/bootstrap的整合

我们自然是希望所有的APP不用做任何修改,拿来就能用了。不过事与愿违,在整合的过程中多多少少都会遇到一些问题。django-userena默认的模板在项目中显示的非常难看。我们需要重写django-userena的默认模板,并且用django-bootstrap来生成form。

forms.py
#为原始form添加BootstrapMixin
from bootstrap.forms import BootstrapMixin

class BsAuthenticationForm(AuthenticationForm, BootstrapMixin):
 def __init__(self, *args, **kw):
  super(BsAuthenticationForm, self).__init__(*args, **kw)
  self.__bootstrap__()
 
urls.py
#重写urls,指定使用的form
from django.conf.urls.defaults import *
from userena import views as userena_views
from profiles.forms import BsSignupForm, BsAuthenticationForm

urlpatterns = patterns('',
 url(r'^signup/$', userena_views.signup,
  {'signup_form': BsSignupForm}, name='userena_signup'),
 url(r'^signin/$', userena_views.signin,
  {'auth_form': BsAuthenticationForm}, name='userena_signin'),
 (r'^', include('userena.urls')),
)

中文用户名问题

同django-admin一样,django-userena也无法使用中文进行注册。对于一个中文网站而言,不能使用中文注册ID似乎有些太不合理的。

django-userena使用正则表达式对用户名进行校验,重写注册form修改认证规则即可取消该限制。

USERNAME_RE = r'^\S+$'
attrs_dict = {'class': 'required'}

class BsSignupForm(SignupForm, BootstrapMixin):
 username = forms.RegexField(regex=USERNAME_RE,
        max_length=30,
        widget=forms.TextInput(attrs=attrs_dict),
        label=_("Username"),
        error_messages={'invalid': _('Username must contain only letters, numbers, dots and underscores.')})

 def __init__(self, *args, **kw):
  super(BsSignupForm, self).__init__(*args, **kw)
  self.__bootstrap__()
Python 相关文章推荐
python的迭代器与生成器实例详解
Jul 16 Python
详解Python中的正则表达式的用法
Apr 09 Python
学习python 之编写简单乘法运算题
Feb 27 Python
Python爬取网易云音乐上评论火爆的歌曲
Jan 19 Python
朴素贝叶斯Python实例及解析
Nov 19 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
Django实现celery定时任务过程解析
Apr 21 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
python如何将mat文件转为png
Jul 15 Python
在SAE上部署Python的Django框架的一些问题汇总
May 30 #Python
python实现比较两段文本不同之处的方法
May 30 #Python
python统计文本文件内单词数量的方法
May 30 #Python
python使用win32com库播放mp3文件的方法
May 30 #Python
基于wxpython开发的简单gui计算器实例
May 30 #Python
python图像处理之镜像实现方法
May 30 #Python
python图像处理之反色实现方法
May 30 #Python
You might like
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
php中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
js静态方法与实例方法分析
2011/07/04 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
AngularJS入门教程之链接与图片模板详解
2016/08/19 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
python实现代码统计器
2019/09/19 Python
快速创建python 虚拟环境
2020/11/28 Python
python自动生成证件号的方法示例
2021/01/14 Python
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
母亲节演讲稿
2014/05/27 职场文书
经理聘任证明
2015/03/02 职场文书
校园运动会广播稿
2015/08/19 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
vue+element ui实现锚点定位
2021/06/29 Vue.js
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android