Django之后台管理二
前面讲到admin界面用户的注册以及修改,如果我们注册的用户密码忘记了该怎么办呢
在终端输入如下的命令进行重置
D:\django_test2>python manage.py shell
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.
IPython 5.3.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [2]: from django.contrib.auth.models import User
In [3]: user = User.objects.get(username='zhf')
(0.001) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_
user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."username" = 'zhf'; args=('zhf',)
In [4]: user.set_password('xxxxx')
In [5]: user.save()
(0.000) BEGIN; args=None
(0.001) UPDATE "auth_user" SET "password" = 'pbkdf2_sha256$30000$ztylCxamAKb3$upNib9+1EAYRkMGwKESIsy7m6VIzsef0ioHsJYer3wQ=', "last_login" = '2017-12-10 13:53:11.655000', "is_superuser" = 1, "username" = 'zhf', "fi
rst_name" = '', "last_name" = '', "email" = 'maple412@163.com', "is_staff" = 1, "is_active" = 1, "date_joined" = '2017-12-10 13:34:59.874000' WHERE "auth_user"."id" = 1; args=(u'pbkdf2_sha256$30000$ztylCxamAKb3$up
Nib9+1EAYRkMGwKESIsy7m6VIzsef0ioHsJYer3wQ=', u'2017-12-10 13:53:11.655000', True, u'zhf', u'', u'', u'maple412@163.com', True, True, u'2017-12-10 13:34:59.874000', 1)
下面进入关键部分,前面只有用户的信息,如何来监控我们自己定义的模块呢。比如我们在models.py中定义的那些模型如何在后台显示出来呢。我们先看下Django的文件结构,可以看到有一个admin.py的文件。这里就是我们对模型进行注册的地方。

我们首先对这些模块进行注册,代码如下

我们再来看下管理界面:可以看到已经增如如下的界面,里面有我们注册的各个模块

那么这些模块的信息是否和我们之前已经创建过的一样呢。我们拿book来举例,点击Book可以看到如下的用户。

点击其中的书名称,即可以进去进行修改
我们可以通过管理界面的增加按钮添加对应的模块

如下图所示:

这些选项和我们模板中的定义的都一样。每一个都是必填项。如果我们添加的时候有一项没有添加,则会报错,如下,提示Address字段是必填项

那么我们怎么能修改某些项为非必填的呢。这需要在模板中修改定义。在address的具体定义中增加blank=True的描述,那么这项就变成了非必填项

可以看到address的颜色变成了灰色。

同样的使用方法还有verbose_name字段,这个设置可以给这些项添加一个别名。如下address将会显示为detail_address
address=models.CharField(max_length=40,blank=True,verbose_name='detail_address')
之前新增了一个author。点击查看的时候除了能看到名字意外,其他如名字,邮件,和地址等信息都看不到。

如果我们想显示出的信息,需要修改代码如下。在admin.py中修改如下:
我们新增了一个显示模板,只定义了一项,就是显示名称的元组。用于列表显示。然后在register中新增了AuthorAdmin,这个可以理解为将AuthorAdmin模块注册到Author中去。
我们所有对于模板的显示和自定义操作都可以在这里面进行重写
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name','last_name','email','age')
list_editable = ('email','age')
admin.site.register(Author,AuthorAdmin)
从下面的解释中可以看到,如果第二个参数没有设置,那么模板将会继续使用第一个参数的模板

我们现在来看下界面:可以看到增加了各个具体字段的显示。并且email和age可以在线编辑修改。不用点击进入具体模块进行修改。

增加list_filter和serach_fields的定义。并会出现对应的过滤器框
list_filter=('age','email')
search_fields = ('age','email')

在输入框中输入对应的搜索字段,便可以得到对应的搜索结果

我们再继续看下动作的定义:在默认的动作项中,只有删除的动作。如果我们想有更多自定义的动作该如何操作呢

在AuthorAdmin中添加action的描述。Actions里面是具体的动作函数,在这里是save_excel
然后自定义的save_excel函数。并且携带request以及queryset的参数。其中request可以访问的参数,可以用来区别用户,queryset是author的查询集合。save_excel.short_description用来命名在动作显示的名字。
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name','last_name','email','age')
list_editable = ('email','age')
list_filter=('age','email')
search_fields = ('age','email')
actions = [u'save_excel']
def save_excel(self,request,queryset):
pass
save_excel.short_description = u'下载选中的数据'
这样在动作中就有了我们自定义的action。

在后台的访问中,有多个用户都会登录进来,那么我们想针对不同的用户进行权限隔离,该如何操作呢。这里就要用到重写changelist_view
首先我们增加一个非super权限的账户:

并且设置所有模型的添加,修改,删除权限

添加后可以看到2个用户。

在AuthorAdmin中定义changelist_view函数,通过request.user.is_superuser来判断是否为超级用户,并且对超级用户和非超级用户的显示和编辑权限进行区分设置
def changelist_view(self, request, extra_context=None):
if request.user.is_superuser:
self.list_display = ('first_name','last_name','email','age')
self.list_editable = ('email','age')
self.list_filter=('age','email')
self.search_fields = ('age','email')
else:
self.list_display = ('email','age')
self.list_filter = ('email','age')
return super(AuthorAdmin, self).changelist_view(request, extra_context=None)
再次以zhf1的账户登录,发现其中的显示页面以及可编辑页面都已经和超级用户不同。

我们来看另外一个模板,Book, 其中authors的定义是manytomanyFiled。这是什么意思呢,通俗理解就是多对多。就比如一本书的作者有多个不知一个的意思。
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
def __unicode__(self):
return self.name
如下在Authors的界面中可以看到2个之前新增的用户

另外注意Publisher, 在模板中的定义是ForeignKey也就是数据库中的外键。我们添加的时候会自动跳到Publisher的界面

可以看出django的后天可以方便我们对数据进行各种高效的管理,相比flask,django提供了各种各样的模块,更加方便我们对数据的处理。更多admin的用法请参考官方的介绍文档
Django之后台管理二的更多相关文章
- Django之后台管理一
所有的网站都有一个管理后台来对所有的网站数据进行管理.那么Django的后台管理是如何进行的.在网页中输入http://127.0.0.1:8001/admin.得到如下的登录界面 在这里可以看到管理 ...
- Django之学员管理二
Django之学员管理二 学生表的一对多的增删改查 views.py def students(request): #select students.sid,students.name,classes ...
- django带后台管理功能的网站
一.原起: 我大学是学的.Net平台.在那个平台上开发网站用的是ASP.NET这门技术:在那里对数据库的处理.为了 方便写代码,通常也是会用ORM(对象关系模型映射):毕业后搞起了MySQL数据库.自 ...
- Django Admin后台管理模块的使用
Admin后台管理模块的使用 Django的管理员模块是Django的标准库django.contrib的一部分.这个包还包括其它一些实用的模块: django.contrib.auth django ...
- 解决django的后台管理界面添加中文内容乱码问题
在使用django migrate功能时,默认数据库的字符集不是utf8. 是latin 1,然后在后台管理model时,不允许有中文字符插入 解决方案: 在使用migrate建库之前先把数据库建立起 ...
- Django Admin后台管理功能使用+二次开发
一 使用环境 开发系统: windows IDE: pycharm 数据库: msyql,navicat 编程语言: python3.7 (Windows x86-64 executable in ...
- Python菜鸟之路:Django Admin后台管理功能使用
前言 用过Django框架的童鞋肯定都知道,在创建完Django项目后,每个app下,都会有一个urls.py文件,里边会有如下几行: from django.contrib import admin ...
- django admin后台管理功能的学习
1.简要说明 用过Django框架的童鞋肯定都知道,在创建完Django项目后,每个app下,都会有一个urls.py文件,里边会有如下几行: from django.contrib import a ...
- Django Admin后台管理功能使用
前言 用过Django框架的童鞋肯定都知道,在创建完Django项目后,每个app下,都会有一个urls.py文件,里边会有如下几行: 1 2 3 4 5 from django.contrib im ...
随机推荐
- centos7 安装 mysql-python时 报错 EnvironmentError: mysql_config not found
pip install mysql-python 然后报错 EnvironmentError: mysql_config not found 网上搜解决方法,需要安装 mysql-devel 然后 ...
- Azure上采用Powershell从已有的VHD创建VM
刚刚的一篇Blog采用Json Template的方式从已有的VHD创建了一台新的VM.由于Json Template封装的比较好,可以改的内容不多. 下面将介绍通过用Powershell来从已有的V ...
- svn更新报错:出现skipped:目标路径
skipped 意为:跳过此目标文件: 一般出现在目标文件被删除后,重新更新情况下: 解决办法及结果: 1,回到此目标文件的上一层文件夹,team-clean up,结果不成功 2,回到此目标文件的上 ...
- 【转】 Pro Android学习笔记(八三):了解Package(2):包签名过程
目录(?)[-] 类比例子 数字签名 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在W ...
- $timeout()定时器
非常不幸的一点是,人们似乎常常将AngularJS中的$timeOut()函数看做是一个内置的.无须在意的函数.但是,如果你忘记了$timeOut()的回调函数将会造成非常不好的影响,你可能会因此遇到 ...
- win10/server2019 系统安装 详解
https://www.microsoft.com/zh-cn/software-download/windows10 https://go.microsoft.com/fwlink/?LinkId= ...
- Python模块之: ConfigParser 配置文件读取
Python模块之: ConfigParser 配置文件读取 ConfigParser用于读写类似INI文件的配置文件,配置文件的内容可组织为组,还支持多个选项值(option-value)类型. ...
- 2016.8.17服务器端数据库用户导入导出方法 expdp和impdp
EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用. IMP只适用于EXP导出的 ...
- 关于struts2.3的action
struts2.3中支持实时配置,也就是说不用在struts.xml中进行配置.但是所有的action文件应该放在有路径名含action的包中,否则程序无法发现你的action. 这个问题,难为了我好 ...
- 【Android 多媒体应用】使用MediaCodec将摄像头采集的视频编码为h264
MainActivity.java import android.app.Activity; import android.graphics.ImageFormat; import android.h ...