Django 用户登陆访问限制实例 @login_required

在网站开发过程中,经常会遇到这样的需求:用户登陆系统才可以访问某些页面,如果用户没有登陆而直接访问就会跳转到登陆界面。

要实现这样的需求其实很简单:

1、在相应的 view 方法的前面添加 django 自带的装饰器 @login_required

2、在 settings.py 中配置 LOGIN_URL 参数

3、修改 login.html 表单中的 action 参数

# views.py

from djanco.contrib.auth.decorators import login_required

from django.shortcuts import render_to_response

@login_required

def index(request):

return render_to_response('index.html')

# settings.py

....

LOGIN_URL = '/accounts/login/' # 根据你网站的实际登陆地址来设置

....

如果要使用 django 默认登陆地址,则可以通过在 urls.py 中添加如此配置:

# urls.py

....

url(r'^accounts/login/', views.login),

....

# login.html

<div class="container">

<form class="form-signin" action="/accounts/login/" method="post">

{% csrf_token %}

<!--csrf_token:生成令牌-->

<h2 class="form-signin-heading" align="center">登录系统</h2>

<label for="inputUsername" class="sr-only">username</label>

<input type="text" name="username" id="inputUsername" class="form-control" placeholder="username" required autofocus>

<label for="inputPassword" class="sr-only">Password</label>

<input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>

<div class="checkbox">

<label>

<input type="checkbox" value="remember-me"> 记住密码

</label>

</div>

<br />

<button class="btn btn-lg btn-primary btn-block" type="submit">登录</button>

<br />

<span style="color: red;">{{ login_err }}</span>

</form>

</div>

<!-- /container -->

补充知识:Django 之禁止特定的 IP访问系统

有时候我们上一些网站,或者用爬虫技术去爬,使用的次数很频繁,会被网站记录加入黑名单,当我们再次访问的时候会被提示,你不能访问该网址。

那么这个技术在 Django 里面如何实现呢?

我搜索了一些方法,找到的资料不多,有一些可能有效,但是没有可以直接运行 demo,那么这里就提供一种使用中间件的 demo,亲测有效。

自定义一个 middleware.py 文件,这个文件要在 Django 的 settings.py 配置文件中被引用,所以我放在与 settings.py 同文件夹的目录下。

middleware.py

from django.http import HttpResponse

from django.utils.deprecation import MiddlewareMixin # 1.10.x

class TestMiddleware(MiddlewareMixin):

def process_view(self,request,view_func,*view_args,**view_kwargs):

EXCLUDE_IPS = ['192.168.1.54']

if 'HTTP_X_FORWARDED_FOR' in request.META:

ip = request.META['HTTP_X_FORWARDED_FOR']

else:

ip = request.META['REMOTE_ADDR']

if ip in EXCLUDE_IPS:

return HttpResponse('<h1>您的ip被禁止</h1>')

其中,关于自定义中间件的函数名称例如 process_view() ,还有其它的例如 _init_ 之类在文档中有具体解释,这里只用到这个。

然后在 settings.py 中引入这个中间件:

settings.py

[

'hunter.middleware.TestMiddleware',

]

其中 hunter 是我的系统的名称,在末尾添加即可。

然后重启我们的 Django 系统,就可以实现禁止特定 IP 访问的功能。

注意

这个 EXCLUDE_IPS 是我手动添加的一个列表,如果想对这个 IP 进行可持续发展的管理,可以在用户访问系统的时候记录下他们的 IP ,然后记录在 MySQL 数据库中,对其中的异常数据进行禁止的处理。

对于访问用户频繁访问、添加黑名单有很好的疗效,这里值得推荐。

以上这篇Django 用户登陆访问限制实例 @login_required就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 Django 用户登陆访问限制实例 @login_required 的全部内容, 来源链接: utcz.com/z/339132.html

回到顶部