使用django做管理后台
2014-01-12 01:36
555 查看
这里使用的是 django 1.3
django 的admin非常方便,
目录结构中有 manage.py 启动文件 urls.py 路由配置 settings.py 各种配置写在这里
比如可以python manage.py runserver 127.0.0.1:8000 ,此时我们可以打开127.0.0.1:8000进入后台管理界面。
1.管理后台的数据模型与展示模板
django是将我们定义的数据表映射为一个 编辑页面。对此首先要定义数据模型。
管理后台一般是admin.py 文件中。
admin.site.register(Blog)
我们可以把这个Blog 的数据表模型注册到管理后台中,这样在浏览Blog的目录列表时默认展示的是 __unicode__ 或者 __str__ 函数的返回值,如果对其具体操作,则可以点击链接进去。然后我们可以更自由的定义它在管理后台怎么展示,可以定义一个
action 定义在 ModelAdmin 中,
filter , exclude 筛选出 queryset.
Blog.objects.filter(content__endswith="gausszh")
在要筛选的字段名后接双下划线和一些特定的词,比如上表的.
对于比较复杂的条件查询,可以用Q语句.
from django.db.models import Q
相当于如下的sql
django 的admin非常方便,
目录结构中有 manage.py 启动文件 urls.py 路由配置 settings.py 各种配置写在这里
比如可以python manage.py runserver 127.0.0.1:8000 ,此时我们可以打开127.0.0.1:8000进入后台管理界面。
1.管理后台的数据模型与展示模板
django是将我们定义的数据表映射为一个 编辑页面。对此首先要定义数据模型。#coding=utf-8 from django.db import models from django.contrib.auth.models import User # Create your models here. class Blog(models.Model): title=models.CharField(u"标题",max_length=60) content=models.TextField(u"正文") user=models.ForeignKey(User,verbose_name=u"作者") category=models.CharField(u"类型",max_length=20) status=models.NullBooleanField(u"可用") created_at=models.DateTimeField(u"建立时间",auto_now_add=True) updated_at=models.DateTimeField(u"修改时间",auto_now=True) class Meta: verbose_name = u"A.博客" db_table = "blog_table_name" verbose_name_plural = u"A.博客列表" ordering = ("-created_at",) get_latest_by = "created_at" def __unicode__(self): return self.title
管理后台一般是admin.py 文件中。
admin.site.register(Blog)
我们可以把这个Blog 的数据表模型注册到管理后台中,这样在浏览Blog的目录列表时默认展示的是 __unicode__ 或者 __str__ 函数的返回值,如果对其具体操作,则可以点击链接进去。然后我们可以更自由的定义它在管理后台怎么展示,可以定义一个
#coding=utf-8 from django.contrib import admin from models import Blog class BlogAdmin ( admin.ModelAdmin ) : list_display = ( 'user', 'title','category','status', 'created_at','updated_at',)#展示这些字段,这要和models中定义的Blog定义的一样 list_display_links =('title',) #点击这个项进入编辑页,如果不设置则默认是点击ID项 list_filter = ( 'user','title','status', 'created_at', 'updated_at',) ordeing = ( '-created_at' , '-updated_at',)#展示时默认排序方式,字段前加符号-,代表降序排列 search_fields = ( 'title', 'user','content',)#搜索字段,输入的值会在这3个字段中搜寻 admin.site.register ( Blog, BlogAdmin )#定制我们自己的展示页面
2.自定义action操作
默认的action操作是,删除所选项。当然我们也可以定制。不同版本的django写的方法不一样。苦逼的是我们还是只能用django 1.3.1版本。action 定义在 ModelAdmin 中,
class GuideAdmin(admin.ModelAdmin): list_display = ( 'id', 'game_id', 'game_name', 'other_platform_game_name', 'game_class', 'category', 'title', 'article_id', 'has_img', 'has_video', 'read_count', 'is_senior', 'senior_title', 'senior_image_urn', 'enable', 'create_time') search_fields = ('article_id', 'game_name', 'other_platform_game_name') list_display_links = ('game_name', 'title') list_per_page = 20 raw_id_fields = ('category',) list_filter = ['game_class', 'enable', 'category', 'game_id'] actions_selection_counter = True actions = ['active_guide', 'forbidden_guide'] # 定义action def active_guide(self, request, queryset): """ 启用攻略 """ guide_ids = request.POST.getlist('_selected_action') now = datetime.datetime.now() success_count = 0 if guide_ids: for guide_id in guide_ids: guide = Guide.objects.filter(id=guide_id).get() # 使用 django的ORM 查询mysql if guide and guide.game_id and guide.game_id > 0 and not guide.enable: guide.update_time = now guide.enable = True guide.save() #存储 success_count += 1 self.message_user(request, u"已启动%s个攻略." % success_count) #给用户的提示信息 active_guide.short_description = u'启用攻略' def forbidden_guide(self, request, queryset): # change_form_template = 'backend/guide_change_form.html' #如果要使用自定义的模板,则需此定义 def change_view(self, request, object_id, extra_context=None): extra_context = {'ext_form_url': request.path, 'HTTP_REFERER': request.META.get('HTTP_REFERER')} #点击编辑时的页面,这样可以在编辑完成后返回此页面 result = super(GuideAdmin, self).change_view(request, object_id, extra_context) #需要在模板页面中 <input type="hiden" value="{{HTTP_REFERER}}"> result["Location"] = request.POST.get('HTTP_REFERER') #编辑完成后,跳转到 hidden中的地址 return result
3.过滤器
后台查询
django后台的过滤器。比如filter , exclude 筛选出 queryset.
Blog.objects.filter(content__endswith="gausszh")
在要筛选的字段名后接双下划线和一些特定的词,比如上表的.
对于比较复杂的条件查询,可以用Q语句.
from django.db.models import Q
Poll.objects.get( Q(question__startswith='Who'), Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)) )
相当于如下的sql
SELECT * from polls WHERE question LIKE 'Who%' AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')
4.cache
每个 QuerySets都有cache ,以减少向db的查询.但是QuerySets的结果要全部计算出来的时候才能用cache.django orm 采用懒惰的计算方式,使用的时候才向db正式取数据.qs = Blog.objects.all() qs[5] qs[5] 需要两次链接 ====== qs = Blog.objects.all() [a.content for a qs] 向数据库发起连接,将所有结果计算出来 qs[5] 从cache中取
相关文章推荐
- Django-- admin后台管理模块的使用
- Django Admin后台管理模块的使用
- Django:(博客系统)使用使用mysql数据->后台管理tag/post/category的配置
- 四【用django2.0来开发】后台会员管理(二) ModelForm表单的使用方法以及数据验证
- django不用在数据库中创建新的user表而使用它的后台管理功能
- Python菜鸟之路:Django Admin后台管理功能使用
- 三【用django2.0来开发】后台会员管理(二) ModelAdmin 模型管理的使用方法
- 使用Django快速搭建简单的数据管理后台
- Django Admin后台管理功能使用(学习版)
- 2.4、使用Django自带的admin用户管理,权限管理
- Django开发运维后台(四):几个ArchiveView的使用
- 使用django的权限管理系统permission
- Django自动生成Admin后台管理页面
- python web开发——Django后台管理
- python3.4下django集成使用xadmin后台的方法
- 使用pycharm手动搭建python语言django开发环境 - 使用git管理代码(二)
- PythonWeb开发Django框架学习(十一)使用框架自带Admin管理数据库数据
- Part 2:模型与后台管理admin站点--Django从入门到精通系列教程
- 为django 1.7 admin后台添加模板(使用django-suit)
- django中如何使用grappelli来美化后台网站