<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>django-userena &#8211; 天地一沙鸥</title>
	<atom:link href="https://haoluobo.com/tag/django-userena/feed/" rel="self" type="application/rss+xml" />
	<link>https://haoluobo.com</link>
	<description>to be continue....</description>
	<lastBuildDate>Thu, 16 Dec 2021 03:41:13 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>timeline项目开发日志&#8211;登陆、注册模块</title>
		<link>https://haoluobo.com/2012/01/timeline-re/</link>
					<comments>https://haoluobo.com/2012/01/timeline-re/#comments</comments>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Tue, 17 Jan 2012 14:35:34 +0000</pubDate>
				<category><![CDATA[vicalloy的庄家]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[django-userena]]></category>
		<category><![CDATA[timeline]]></category>
		<guid isPermaLink="false">/?p=10353</guid>

					<description><![CDATA[利用twitter/bootstrap，项目的基础模板算是顺利搞定。接下来开始处理用户中心。用户中心主要包括用 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>利用<a href="https://github.com/twitter/bootstrap" target="_blank" rel="noopener">twitter/bootstrap</a>，项目的基础模板算是顺利搞定。接下来开始处理用户中心。<br>用户中心主要包括用户登陆、注册以及头像等个人信息维护。此前，用户的注册管理我一直使用<a href="https://bitbucket.org/ubernostrum/django-registration" target="_blank" rel="noopener">django-registration</a>。只是这个APP有些不思进取，09年发布了0.8alpha版后就一直没什么动静。这次决定尝试另外一个用户模块组件<a href="https://github.com/bread-and-pepper/django-userena" target="_blank" rel="noopener">django-userena</a>。<br>相比django-registration，django-userena的功能要完善的多。除基础的登陆注册模块外django-userena甚至还带了站内消息功能。django-userena的易用性方面也做的非常的不错。django-userena自带了默认模板，并有提供一个完整的演示项目，让你可以轻松上手。这里有个官方的在线demo，感兴趣可以<a href="http://django-userena.org/accounts/signup/" target="_blank" rel="noopener">去看看</a>。</p>



<h3 class="wp-block-heading">django-userena同twitter/bootstrap的整合</h3>



<p>我们自然是希望所有的APP不用做任何修改，拿来就能用了。不过事与愿违，在整合的过程中多多少少都会遇到一些问题。django-userena默认的模板在项目中显示的非常难看。我们需要重写django-userena的默认模板，并且用<a href="https://github.com/earle/django-bootstrap" target="_blank" rel="noopener">django-bootstrap</a>来生成form。<br><strong>forms.py</strong></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
#为原始form添加BootstrapMixin
from bootstrap.forms import BootstrapMixin
class BsAuthenticationForm(AuthenticationForm, BootstrapMixin):
    def __init__(self, *args, **kw):
        super(BsAuthenticationForm, self).__init__(*args, **kw)
        self.__bootstrap__()
</pre></div>


<p><strong>urls.py</strong></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
#重写urls，指定使用的form
from django.conf.urls.defaults import *
from userena import views as userena_views
from profiles.forms import BsSignupForm, BsAuthenticationForm
urlpatterns = patterns(&#039;&#039;,
    url(r&#039;^signup/
</pre></div>


<h3 class="wp-block-heading">中文用户名问题</h3>



<p>同django-admin一样，django-userena也无法使用中文进行注册。对于一个中文网站而言，不能使用中文注册ID似乎有些太不合理的。<br>django-userena使用正则表达式对用户名进行校验，重写注册form修改认证规则即可取消该限制。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
USERNAME_RE = r&#039;^\S+
, userena_views.signup,
        {&#039;signup_form&#039;: BsSignupForm}, name=&#039;userena_signup&#039;),
    url(r&#039;^signin/
</pre></div>


<h3 class="wp-block-heading">中文用户名问题</h3>



<p>同django-admin一样，django-userena也无法使用中文进行注册。对于一个中文网站而言，不能使用中文注册ID似乎有些太不合理的。<br>django-userena使用正则表达式对用户名进行校验，重写注册form修改认证规则即可取消该限制。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
USERNAME_RE = r&#039;^\S+$&#039;
attrs_dict = {&#039;class&#039;: &#039;required&#039;}
class BsSignupForm(SignupForm, BootstrapMixin):
    username = forms.RegexField(regex=USERNAME_RE,
                                max_length=30,
                                widget=forms.TextInput(attrs=attrs_dict),
                                label=_(&quot;Username&quot;),
                                error_messages={&#039;invalid&#039;: _(&#039;Username must contain only letters, numbers, dots and underscores.&#039;)})
    def __init__(self, *args, **kw):
        super(BsSignupForm, self).__init__(*args, **kw)
        self.__bootstrap__()
</pre></div>]]></content:encoded>
					
					<wfw:commentRss>https://haoluobo.com/2012/01/timeline-re/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
	</channel>
</rss>
