Django 用户登陆访问限制实例 @login_required
作者:菲宇 发布时间:2021-05-26 07:31:22
在网站开发过程中,经常会遇到这样的需求:用户登陆系统才可以访问某些页面,如果用户没有登陆而直接访问就会跳转到登陆界面。
要实现这样的需求其实很简单:
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 数据库中,对其中的异常数据进行禁止的处理。
对于访问用户频繁访问、添加黑名单有很好的疗效,这里值得推荐。
来源:https://blog.csdn.net/bbwangj/article/details/89161528
猜你喜欢
- 本文实例讲述了Python线性拟合实现函数与用法。分享给大家供大家参考,具体如下:1. 参考别人写的:#-*- coding:utf-8 -
- 【代码示例】 [code=SQL] DELIMITER $$ DROP FU
- 一、发送电子邮件Python标准库提供了smtplib,用于实现SMTP协议发送邮件。标准库还提供email模块帮助我们构建邮件格式。SMT
- 网页制作中需要把握好很多原则和细节,今天我们来谈谈网页设计中的平衡、对比、连贯和留白。一、平衡如果你的页面是平衡的,当用户浏览这个页面的时候
- 这篇文章主要介绍了如何基于pythonnet调用halcon脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 一、图像二值化1.效果2.源码import cv2import numpy as npimport matplotlib.pyplot as
- 1. Python字典的clear()方法(删除字典内所有元素)#!/usr/bin/python# -*- coding: UTF-8 -
- python第三方库的安装PyInstaller库PyInstaller库能够在不同操作系统下将python源文件打包,变成直接可运行的可执
- 本文中介绍的系统优化,主要针对前端和后台这两方面(后台方面主要对SQL语句和数据存储进行了优化),下文中我们将介绍一些优化技巧和经验。技巧:
- 本文实例讲述了Python基于opencv实现的简单画板功能。分享给大家供大家参考,具体如下:import cv2import numpy
- 1.类方法类方法是从属于"类对象"的方法。类对象可以通过装饰器@classmethod来定义,具体格式如下:@class
- 不过有一个简单的执行cmd命令方法: SQL> host net user User accounts for \\PC-ATQHJ4
- 流式布局流式布局,也叫做瀑布流布局,是网页中经常使用的一种页面布局方式,它的原理就是将高度固定,然后图片的宽度自适应,这样加载出来的图片看起
- 每个产品诞生的背后都凝结着一位或是多位设计师的心血,在产品的诞生过程中文化、科技、环保、创意等这些方方面面的细节集结成一个绚丽的故事,因为有
- 一:操作session1:session配置Session 的配置文件存储在config/session.php中,配置参数有:(1):配置
- 这篇文章主要介绍了python代码如何实现余弦相似性计算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- PHP levenshtein() 函数实例计算两个字符串之间的 Levenshtein 距离:<?php echo levensht
- 前言问题:做requests请求时遇到如下报错:{“code”:“500&
- 1、使用mysqli扩展库 预处理技术 mysqli stmt 向数据库添加3个用户<?php /
- 这种组合使得开发Web程序简单、安全、效率高。由于程序是在Linux下运行,虽免去了版权费用,对数据库的管理却少了Windows下的图形界面