Django 中间件和admin

Par @Martin dans le
Tags :

在django中, 中间件其实就是一个类, 在请求到来和结束后, django 会根据自己的规则在合适的时机执行中间件中相应的方法.

在 django 项目的 settings.py 模块中, 有一个 MIDDLEWARE_CLASSES 变量, 其中每一个元素就是一个中间件, 如下图.

除了上面的中间件外, 还有两个常用的中间件: 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?