Django搭建博客_6:内置方法实现登录和退出

1 内置登录方法

~/site-packages/djanngo/cotrib/auth/views.py文件中的login()函数即为内置的登录函数。

方法一 使用默认文件位置

在views.py文件中,说明了模板文件的位置:template_name = ‘registration/login.html’。

  • 将./account/urls.py中引入django自带的视图文件:
from django.conf.urls import url
from . import views

from django.conf import settings
from django.contrib.auth import views as auth_views # 引入Django内置视图文件

urlpatterns = [
    #url(r'^login/$', views.user_login, name='user_login'), # 自定义的登录
	url(r'^login/$', auth_views.login, name='user_login'),  # django内置的登录
]
  • /mysite/templates/registration/中创建login.html文件(/auth/views.py文件中template_name指向的位置)。代码如下:
{% extends "base.html" %}
{% load staticfiles %}
{% block title %}Login{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
	<h1>Login</h1>
	<p>Input your username and password</p>
	<form class="form-horizontal" action="{% url 'account:user_login' %}" method="post">
		{% csrf_token %}
		<!-- {{ form.as_p }} -->
		<div class="form-group">
			<label for="{{ form.username.id_for_label }}" class="col-md-5 control-label" style="color:red"><span class="glyphicon glyphicon-user"></span>Username</label>
			<div class="col-md-6 text-left">{{ form.username }}</div>
		</div>
		<div class="form-group">
			<label for="{{ form.password.id_for_label }}" class="col-md-5 control-label" style="color:blue"><span class="glyphicon glyphicon-floppy-open"></span>Password</label>
			<div class="col-md-6 text-left">{{ form.password }}</div>
		</div>
		<input type="submit" class="btn btn-primary btn-lg" value="Login">
	</form>
</div>
{% endblock %}

其中action="{% url ‘account:user_login’ %}",代表用具体的额URL指明了数据的POST目标。

  • 设置重定向。在~/auth/views.py中还有一个参数,REDIRECT_FIELD_NAME,这是登录后重定向的设置,如果想要改变重定向的值,需要在./mysite/settings.py中设置任意位置LOGIN_REDIRECT_URL = ‘/blog/’,意思是重定向后跳转到blog页面。

此时使用访问http://127.0.0.1:8000/account/login,使用之前创建的账号密码即可进行的登录操作。

方法二 自定义模板位置

在login()方法中,可以给template_name传值,来实现模板文件自定义位置,修改./account/urls.py文件

from django.conf.urls import url
from . import views

from django.conf import settings
from django.contrib.auth import views as auth_views

urlpatterns = [
	#url(r'^login/$', views.user_login, name='user_login'), # 自定义的登录
	url(r'^login/$', auth_views.login, name='user_login'),  # django内置的登录
	url(r'^new-login/$', auth_views.login, {"template_name" : "account/login.html"}),
]

浏览器访问http://127.0.0.1:8000/account/new-login/即可访问登录页面。

2 判断用户是否登录

增加功能:根据用户是否登录,在表头展示不同的内容:登录状态时,暂时用户名和的Logout字样,如果未登录状态,则显示Login字样。
修改header.html模板:

{% load staticfiles %}
<div class="container">
    <nav class="navbar navbar-default" role="navigation">
        <div class="navbar-header">
            <a class="navbar-brand" href="https://blog.csdn.net/tt75281920"><img src="{% static '/images/logo.png' %}" width="100px"></a>
		</div>
		<div>
			<ul class="nav navbar-nav" role="navigation">
				<li><a href="{% url 'blog:blog_title' %">BLOG</a></li>
			</ul>
			<ul class="nav navbar-nav navbar-right" style="margin-right:10px">
				{% if user.is_authenticated %}
				<li><a hreef="#">{{ user.username }}</a></li>
				<li><a hreef="#">LOGOUT</a></li>
				{% else %}
				<li><a href={% url 'account:user_login'%}>LOGIN</a></li>
				{% endif %}
			</ul>
		</div>
	</nav>
</div>

html中if语句:

{% if user.is_authenticated %}
<li><a hreef="#">{{ user.username }}</a></li>
<li><a hreef="#">LOGOUT</a></li>
{% else %}
<li><a href={% url 'account:user_login'%}>LOGIN</a></li>
{% endif %}		

3 内置的退出方法

Django中内置了退出函数,与登录类似。

  • 首先配置URL。
    编辑./account/urls.py,添加配置:
url(r'^logout/$', auth_views.logout, name='user_logout'), 
  • 在./templates/header.html中给Logout增加超链接:
<li><a href={% url 'account:user_logout' %}>LOGOUT</a></li>

执行退出操作后,展示的是默认的退出界面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FqJ6dx1n-1587210027615)(evernotecid://B1C45E84-DAD5-4A3E-8F09-F042CE8BEC59/appyinxiangcom/9699651/ENResource/p2826)]

  • 在./templates/account中创建一个退出模板logout.html,代码如下:
{% extends "base.html" %}
{% block title %}Logout{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
    <p>You have log out.</p>
    <p>You can <a href="{% url 'account:user_login' %}">LOGIN</a> again.</p>
</div>
{% endblock %}
  • 修改退出的URL
url(r'^logout/$', auth_views.logout, {"template_name" : "account/logout.html"}, name = 'user_logout'), 

再次退出界面显示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tt75281920/article/details/105603907