在django中, 中间件其实就是一个类, 在请求到来和结束后, django 会根据自己的规则在合适的时机执行中间件中相应的方法.
除了上面的中间件外, 还有两个常用的中间件: django.middleware.gzip.GZipMiddleware # 用来压缩浏览器返回的内容, 减少服务器带宽 django.middleware.http.SetRemoteAddrFromForwardedFor # 处理反向代理
中间件中可以定义四个方法, 分别是: process_request(self, request) -- 请求刚发起时 process_view(self, request, callback, callback_args, callback_kwargs) -- 进入 views.py 模块之前 process_exception(self, request, exception) -- 异常时 process_response(self, request, response) -- views.py 返回时 以上方法的返回值可以是 None 和 HttpResonse 对象,如果是 None, 则继续向下执行, 如果是 HttpResonse 对象, 则直接将该对象返回给用户.
**自定义中间件
<span style="color: #008000">#</span><span style="color: #008000"> middleware.py</span>
<span style="color: #0000ff">class</span><span style="color: #000000"> RequestExeute(object):
</span><span style="color: #0000ff">def</span><span style="color: #000000"> process_request(self,request):
</span><span style="color: #0000ff">pass</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> process_view(self, request, callback, callback_args, callback_kwargs):
</span><span style="color: #0000ff">pass</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> process_exception(self, request, exception):
</span><span style="color: #0000ff">pass</span>
<span style="color: #0000ff">def</span><span style="color: #000000"> process_response(self, request, response):
</span><span style="color: #0000ff">return</span> response
**
<span style="color: #008000">#</span><span style="color: #008000"> 注册中间件</span>
MIDDLEWARE_CLASSES =<span style="color: #000000"> (
</span><span style="color: #800000">'</span><span style="color: #800000">middleware.RequestExeute</span><span style="color: #800000">'</span><span style="color: #000000">,
)</span>
admin
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中执行如下配置
<span style="color: #0000ff">from</span> django.contrib <span style="color: #0000ff">import</span><span style="color: #000000"> admin
</span><span style="color: #0000ff">from</span> web <span style="color: #0000ff">import</span><span style="color: #000000"> models
admin.site.register(models.UserType)</span>
b、设置数据表名称
<span style="color: #0000ff">class</span><span style="color: #000000"> UserType(models.Model):
name </span>= models.CharField(max_length=50<span style="color: #000000">)
</span><span style="color: #0000ff">class</span><span style="color: #000000"> Meta:
verbose_name </span>= <span style="color: #800000">'</span><span style="color: #800000">用户类型</span><span style="color: #800000">'</span><span style="color: #000000">
verbose_name_plural </span>= <span style="color: #800000">'</span><span style="color: #800000">用户类型</span><span style="color: #800000">'</span>
c、打开表之后, 设定默认显示, 需要在 model 中作如下配置
<span style="color: #0000ff">class</span><span style="color: #000000"> UserType(models.Model):
name </span>= models.CharField(max_length=50<span style="color: #000000">)
</span><span style="color: #0000ff">def</span> <span style="color: #800080">__unicode__</span><span style="color: #000000">(self):
</span><span style="color: #0000ff">return</span> self.name
<span style="color: #0000ff">from</span> django.contrib <span style="color: #0000ff">import</span><span style="color: #000000"> admin
</span><span style="color: #0000ff">from</span> web <span style="color: #0000ff">import</span><span style="color: #000000"> models
</span><span style="color: #0000ff">class</span><span style="color: #000000"> UserInfoAdmin(admin.ModelAdmin):
list_display </span>= (<span style="color: #800000">'</span><span style="color: #800000">username</span><span style="color: #800000">'</span>, <span style="color: #800000">'</span><span style="color: #800000">password</span><span style="color: #800000">'</span>, <span style="color: #800000">'</span><span style="color: #800000">email</span><span style="color: #800000">'</span><span style="color: #000000">)
admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)</span>
d、为数据表添加搜索功能
<span style="color: #0000ff">from</span> django.contrib <span style="color: #0000ff">import</span><span style="color: #000000"> admin
</span><span style="color: #0000ff">from</span> web <span style="color: #0000ff">import</span><span style="color: #000000"> models
</span><span style="color: #0000ff">class</span><span style="color: #000000"> UserInfoAdmin(admin.ModelAdmin):
list_display </span>= (<span style="color: #800000">'</span><span style="color: #800000">username</span><span style="color: #800000">'</span>, <span style="color: #800000">'</span><span style="color: #800000">password</span><span style="color: #800000">'</span>, <span style="color: #800000">'</span><span style="color: #800000">email</span><span style="color: #800000">'</span><span style="color: #000000">)
search_fields </span>= (<span style="color: #800000">'</span><span style="color: #800000">username</span><span style="color: #800000">'</span>, <span style="color: #800000">'</span><span style="color: #800000">email</span><span style="color: #800000">'</span><span style="color: #000000">)
admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)</span>
e、添加快速过滤
<span style="color: #0000ff">from</span> django.contrib <span style="color: #0000ff">import</span><span style="color: #000000"> admin
</span><span style="color: #0000ff">from</span> web <span style="color: #0000ff">import</span><span style="color: #000000"> models
</span><span style="color: #0000ff">class</span><span style="color: #000000"> UserInfoAdmin(admin.ModelAdmin):
list_display </span>= (<span style="color: #800000">'</span><span style="color: #800000">username</span><span style="color: #800000">'</span>, <span style="color: #800000">'</span><span style="color: #800000">password</span><span style="color: #800000">'</span>, <span style="color: #800000">'</span><span style="color: #800000">email</span><span style="color: #800000">'</span><span style="color: #000000">)
search_fields </span>= (<span style="color: #800000">'</span><span style="color: #800000">username</span><span style="color: #800000">'</span>, <span style="color: #800000">'</span><span style="color: #800000">email</span><span style="color: #800000">'</span><span style="color: #000000">)
list_filter </span>= (<span style="color: #800000">'</span><span style="color: #800000">username</span><span style="color: #800000">'</span>, <span style="color: #800000">'</span><span style="color: #800000">email</span><span style="color: #800000">'</span><span style="color: #000000">)
admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)</span>
更多: http://docs.30c.org/djangobook2/chapter06/
设置 admin 用户: python manage.py createsuperuser 0?