def index(request): | |
data={} | |
#传递request参数有没有比这个更好的实现? | |
data['request'] = request | |
return render_to_response('index.html',data,context_instance=RequestContext(request)) | |
def signin(request): | |
data={} | |
if request.user.is_authenticated(): | |
return HttpResponseRedirect(reverse('index')) | |
if request.method=='GET': | |
return render_to_response('signin.html',data,context_instance=RequestContext(request)) | |
else: | |
form = SigninForm(request.POST) | |
if form.is_valid(): | |
email = form.cleaned_data['email'] | |
password = form.cleaned_data['password'] | |
user = User.objects.get(email=email)#filter指的是集合 不是单个 | |
user_auth = authenticate(username=user.username,password=password) | |
if not user: | |
messages.error(request, '没有该用户') | |
return HttpResponseRedirect(reverse('signin')) | |
elif user_auth is None: | |
messages.error(request, '用户名密码错误') | |
return HttpResponseRedirect(reverse('signin')) | |
else: | |
login(request, user_auth) | |
# 这里是用的跳转,那么如果有全局变量需要传递的时候 但是又不想通过url的参数传递 | |
# 应该怎么办 | |
return HttpResponseRedirect(reverse('index')) | |
else: | |
data['form'] = form | |
return render_to_response('signin.html',data,context_instance=RequestContext(request)) |
<div class="nav-collapse collapse pull-right"> | |
<ul class="nav"> | |
{% if request.user.is_authenticated %} | |
<li> | |
<a href="/settings">{{ request.user.username }}</a> | |
</li> | |
<li> | |
<a href="/logout">退出</a> | |
</li> | |
{% else %} | |
<li> | |
<a href="{% url 'signin' %}">登录</a> | |
</li> | |
<li> | |
<a href="/register">注册</a> | |
</li> | |
{% endif %} | |
</ul> | |
</div> |
![]() |
1
ericFork 2014-06-25 00:20:05 +08:00 ![]() 如果你只是想传递 request 或者 user 的话,直接在 settings 里添加 context processor 更简单一些,比如添加了 django.core.context_processors.request 就可以在模板里直接使用 request 对象了
|
![]() |
2
delo 2014-06-25 00:30:18 +08:00 ![]() 用户名你不是已经可以通过request.user.username获得了么,login之后request.user里就是当前用户对象了
|
![]() |
3
paloalto 2014-06-25 01:10:23 +08:00 ![]() 我习惯存在 session 里。。。
|
4
jianghu52 2014-06-25 08:49:45 +08:00 ![]() up paloalto 我也习惯放session
|
![]() |
5
no13bus OP @delo 其实我的意思是login之后跳转到index里面的时候,index要知道username的值,是不是就是通过data['request'] = request来将request传递到模板里面来使得request.user.username能渲染成功。
|
![]() |
7
no13bus OP @paloalto
@jianghu52 多谢。看了下手册的session 确实这样的解决办法好。总觉得吧request整个对象传递到模板里面太大了。 再多问个问题。form验证里面有个auto_id属性,但是django总是form没有这个key,总报错。 email=forms.EmailField(required=True,auto_id='%s',error_messages={'required':u'邮箱必须','invalid':u'请输入正确的邮箱'},widget=forms.TextInput(attrs={''class':'input-xlarge'})) (这个目的就是让form生成的input标签里面的id='email' 而不是默认的id='id_email'。 下面是我自己的一个笨的解决办法: email=forms.EmailField(required=True,error_messages={'required':u'邮箱必须','invalid':u'请输入正确的邮箱'},widget=forms.TextInput(attrs={'id':'email','class':'input-xlarge'})) 要是auto_id能用就好了。 |