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 获取 Linux 系统信息的代码
Jul 13 Python
Python中多线程及程序锁浅析
Jan 21 Python
python用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
Python3基于sax解析xml操作示例
May 22 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
Djang的model创建的字段和参数详解
Jul 27 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
Python flask框架实现浏览器点击自定义跳转页面
Jun 04 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
在python3.9下如何安装scrapy的方法
Feb 03 Python
python+pyhyper实现识别图片中的车牌号思路详解
Dec 24 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引用效率问题分析
2012/03/23 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
Django Admin实现上传图片校验功能
2016/03/06 Python
利用Python破解验证码实例详解
2016/12/08 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
linux下进程间通信的方式
2013/01/23 面试题
农林环境专业求职信
2014/03/13 职场文书
中华魂演讲稿
2014/05/13 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
法人代表资格证明书
2015/06/18 职场文书
队名及霸气口号大全
2015/12/25 职场文书
PHP命令行与定时任务
2021/04/01 PHP
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android