Django的中间件(middleware)
中间件(middleware)
在Django中,中间件其实就是一个类。在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法。
在Django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件,如下图。
与mange.py在同一目录下的文件夹 wupeiqi/middleware下的auth.py文件中的Authentication类。
中间件中可以定义四个方法,分别是:
process_request(self,request)
process_view(self, request, callback, callback_args, callback_kwargs)
process_exception(self, request, exception)
process_response(self, request, response)
以上方法的返回值可以是None和HttpResonse对象,如果是None,则继续按照django定义的规则向下执行,如果是HttpResonse对象,则直接将该对象返回给用户。
自定义中间件
1.创建中间件类
class
RequestExeute(
object
):
def
process_request(
self
,request):
pass
def
process_view(
self
, request, callback, callback_args, callback_kwargs):
i
=
1
pass
def
process_exception(
self
, request, exception):
pass
def
process_response(
self
, request, response):
return
response
2.注册中间件
MIDDLEWARE_CLASSES
=
(
'django.contrib.sessions.middleware.SessionMiddleware'
,
'django.middleware.common.CommonMiddleware'
,
'django.middleware.csrf.CsrfViewMiddleware'
,
'django.contrib.auth.middleware.AuthenticationMiddleware'
,
'django.contrib.auth.middleware.SessionAuthenticationMiddleware'
,
'django.contrib.messages.middleware.MessageMiddleware'
,
'django.middleware.clickjacking.XFrameOptionsMiddleware'
,
'wupeiqi.middleware.auth.RequestExeute'
,
)
admin
django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查,而使用django admin 则需要以下步骤:
1.创建后台管理员
python manage.py createsuperuser
2.配置url
url(r
'^admin/'
, include(admin.site.urls))
3.注册和配置django admin后台管理页面
a.在admin中执行如下配置
from
django.contrib
import
admin
from
app01
import
models
admin.site.register(models.UserType)
admin.site.register(models.UserInfo)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)
b.设置数据表名称
class
UserType(models.Model):
name
=
models.CharField(max_length
=
50
)
class
Meta:
verbose_name
=
'用户类型'
verbose_name_plural
=
'用户类型'
c.打开表之后,设定默认显示,需要在model中作如下配置
class
UserType(models.Model):
name
=
models.CharField(max_length
=
50
)
def
__unicode__(
self
):
return
self
.name
from
django.contrib
import
admin
from
app01
import
models
class
UserInfoAdmin(admin.ModelAdmin):
list_display
=
(
'username'
,
'password'
,
'email'
)
admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)
d.为数据表添加搜索功能
from
django.contrib
import
admin
from
app01
import
models
class
UserInfoAdmin(admin.ModelAdmin):
list_display
=
(
'username'
,
'password'
,
'email'
)
search_fields
=
(
'username'
,
'email'
)
admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)
e.添加快速过滤
from
django.contrib
import
admin
from
app01
import
models
class
UserInfoAdmin(admin.ModelAdmin):
list_display
=
(
'username'
,
'password'
,
'email'
)
search_fields
=
(
'username'
,
'email'
)
list_filter
=
(
'username'
,
'email'
)
admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)
完善主机管理系统:
1.登陆注册(利用ajax实现,使用onblur事件,检测当前用户名是否已经存在)
用户会话保持(Session)
3. Form验证用户输入
4.自定义中间件记录请求IP(或黑名单)
5.用户管理、用户组管理、主机管理(增删改查,分页)
6.自定义页面表格行数(可选)
跨站请求伪造
简介:django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。
全局:
中间件 django.middleware.csrf.CsrfViewMiddleware
局部:
@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件
@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
注:from django.views.decorators.csrf import csrf_exempt,csrf_protect
应用:
1.普通表单
veiw中设置返回值:
return
render_to_response(
'Account/Login.html'
,data,context_instance
=
RequestContext(request))
html中设置Token:
{
%
csrf_token
%
}
2.Ajax
对于传统的form,可以通过表单的方式将token再次发送到服务端,而对于ajax的话,使用如下方式
view.py
from
django.template.context
import
RequestContext
# Create your views here.
def
test(request):
if
request.method
=
=
'POST'
:
print
request.POST
return
HttpResponse(
'ok'
)
return
render_to_response(
'app01/test.html'
,context_instance
=
RequestContext(request))
text.html