Django 1.5.4 专题六 login 和 logout

login()

在view中使用来登录用户。参数包括一个HttpRequest对象和一个User对象。login() 将用户ID保存到session中(使用Django session framework)。

注意:当用户登陆后对于匿名session的任何数据设置都会保留在session中

首先调用authenticate() 

如果你自己写代码,一定要确保首先调用authenticate(),然后再调用login()。 authenticate() 会设置User的一个属性来通知认证后台该用户已经成功认证(具体参见:backends documentation),这个属性信息在后续的login处理中需要。因此,如果你直接调用login就会抛出异常。

如何登出How to log a user out

logout()

通过 django.contrib.auth.login()登录的用户登出时要在view中使用django.contrib.auth.logout() 。使用HttpRequest对象为参数,无返回值。例如:

注意:logout()不会抛出异常,即使用户并没有登录。

当调用logout()时,当前请求的session数据会彻底清空。如果你需要在用户登出后使用session中的数据,务必在调用django.contrib.auth.logout()后在设置




一.修改settings.py的APPS的内容如下

二.修改django_test/urls.py的内容如下

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    (r'^articles/',include('article.urls')),
    url(r'^hello/$','article.views.hello'),
    url(r'^hello_template_simple/$','article.views.hello_template_simple'),
    # url(r'^$', 'django_test.views.home', name='home'),
    # url(r'^django_test/', include('django_test.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),

    # user auth urls
    url(r'^accounts/login/$','django_test.views.login'),
    url(r'^accounts/auth/$','django_test.views.auth_view'),
    url(r'^accounts/logout/$','django_test.views.logout'),
    url(r'^accounts/loggedin/$','django_test.views.loggedin'),
    url(r'^accounts/invalid/$','django_test.views.invalid_login'),
    url(r'^accounts/register/$','django_test.views.register_user'),
    url(r'^accounts/register_success/$','django_test.views.register_success'),
    
)

三.修改django_test/views.py的内容如下

from django.shortcuts import render_to_response
from django.http    import HttpResponseRedirect,HttpResponse
from django.contrib import auth
from django.core.context_processors import csrf
from django.contrib.auth.forms import UserCreationForm
from datetime import datetime


def login(request):
    c=  {}
    c.update(csrf(request))
    return render_to_response('login.html',c)
def auth_view(request):
    username=request.POST.get('login','')
    password=request.POST.get('password','')
    user=auth.authenticate(username=username,password=password)
    if user is not None:
        auth.login(request,user)
        return HttpResponseRedirect('/accounts/loggedin')
    else:
        return HttpResponseRedirect('/accounts/invalid')
def loggedin(request):
    return render_to_response('loggedin.html',
            {'full_name':request.user.username})
def invalid_login(request):
    return render_to_response('invalid_login.html')
def logout(request):
    auth.logout(request)
    return render_to_response('logout.html')
def register_user(request):
    if request.method =='POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirct('/accounts/register_success')
    args={}
    args.update(csrf(request))
    args['form']=UserCreationForm()
    return render_to_response('register.html',args)
def register_success(request):
    return render_to_response('register_success.html')

四.修改django_test/templates/login.html的内容如下

{% extends "base.html" %}

{% block content %}

    {% if form.errors %}
        <p class="error">Sorry. that's not a valid username or password </p>
    {% endif %}

    <form action="/accounts/auth/" method="post">{% csrf_token %}
        <label for="username">User name:</label>
        <input type="text" name="username" value="" id="username">
        <label for="password">Password:</label>
        <input type="password" name="password" value="" id="password">

        <input type="submit" value="login">
    </form>

{% endblock %}
五.修改django_test/templates/loggedin.html的内容如下
{% extends "base.html" %}

{% block content %}
    <h2>Hi {{full_name}} you are now Logged in!</h2>
    <p>Click <a href="/accounts/logout/">here</a> to logout.  </p>
{% endblock %}

六.修改django_test/templates/register.html的内容如下

{% extends "base.html" %}
{% block content %}
    <h2>Register</h2>
    <form action="/accounts/register/" method="post">
        {{form}}
        <input type="submit" value="Register" />
    </form>
{% endblock %}

六.修改django_test/templates/invalid.html的内容如下

{% extends "base.html" %}

{% block content %}
    <h2>Your login details are invalid!</h2>
    <p>Click <a href="/accounts/login/">here</a>to login again.  </p>
{% endblock %}

七.修改django_test/templates/register_success.html的内容如下
{% extends "base.html" %}
{% block content %}
    <h2>You have registered!</h2>
    <p>Click <a href="/accounts/login/">here</a> to login again </p>
{% endblock %}






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是详细的步骤和示例代码: 1. 创建Django项目并启动服务器 在控制台中进入你想要创建项目的目录下,输入以下命令创建Django项目: ``` django-admin startproject myproject ``` 然后进入myproject目录并启动服务器: ``` cd myproject python manage.py runserver ``` 2. 创建一个应用app 在myproject目录下,输入以下命令创建一个名为myapp的应用: ``` python manage.py startapp myapp ``` 3. 创建登录页面 在myapp目录下创建一个名为templates的文件夹,然后在其中创建login.html文件,代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <h2>Login</h2> <form method="post"> {% csrf_token %} <label for="username">Username:</label> <input type="text" name="username" required> <br> <label for="password">Password:</label> <input type="password" name="password" required> <br> <input type="submit" value="Login"> </form> </body> </html> ``` 4. 创建视图函数 在myapp目录下打开views.py文件并添加以下代码: ```python from django.shortcuts import render, redirect from django.contrib.auth import authenticate, login, logout def login_view(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return redirect('home') else: return render(request, 'login.html', {'error': 'Invalid username or password.'}) else: return render(request, 'login.html') ``` 在这个视图函数中,我们首先判断请求方法是否为POST,如果是,则获取用户名和密码,然后使用authenticate()函数进行验证,如果验证通过,则使用login()函数进行登录,并重定向到首页,否则返回登录页面并显示错误信息。如果请求方法不是POST,则直接返回登录页面。 5. 创建URL映射 在myapp目录下打开urls.py文件并添加以下代码: ```python from django.urls import path from . import views urlpatterns = [ path('login/', views.login_view, name='login'), ] ``` 这个URL映射指向了我们刚刚创建的login_view视图函数。 6. 创建首页 在myapp目录下创建一个名为templates的文件夹,然后在其中创建home.html文件,代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Home</title> </head> <body> <h2>Welcome, {{ user.username }}!</h2> <form action="{% url 'logout' %}" method="post"> {% csrf_token %} <input type="submit" value="Logout"> </form> </body> </html> ``` 这个页面用来显示欢迎信息和一个登出按钮。 7. 创建登出功能 在myapp目录下打开views.py文件并添加以下代码: ```python def logout_view(request): logout(request) return redirect('login') ``` 这个视图函数使用logout()函数来登出用户,并重定向到登录页面。 8. 创建URL映射 在myapp目录下打开urls.py文件并添加以下代码: ```python from django.urls import path from . import views urlpatterns = [ path('login/', views.login_view, name='login'), path('logout/', views.logout_view, name='logout'), ] ``` 这个URL映射指向了我们刚刚创建的logout_view视图函数。 9. 测试登录和登出功能 现在我们可以在浏览器中访问http://localhost:8000/login/来进入登录页面进行登录,如果登录成功,则会重定向到首页http://localhost:8000/并显示欢迎信息和一个登出按钮。点击登出按钮后,会退出登录并重定向到登录页面。 以上就是使用Django内置的loginlogout函数实现登录登出功能的详细步骤和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值