django自带了admin系统。可以对后台做管理。并且设置起来也很方便。
首先,运行:
python manage.py createsuperuser
它会引导你产生一个超级用户,该用户用于登录后台界面。
然后启动django
python manage.py runserver 0.0.0.0:8000
访问页面:http://127.0.0.1:8000/admin/
最后那个斜杠好像很重要。
顺便说一句,不要随便urls.py里的设置,特别是admin/后不要随手加个$,不要问我怎么知道的。
url(r'^admin/', admin.site.urls)
访问那个页面后,输入你刚刚设置好的用户名和密码就可以登录了。
然鹅,万一忘记密码怎么办:
python manage.py shell
from django.contrib.auth.models import User
user=User.objects.get(username='XXX')
user.set_password('new_password')
user.save()
或
python manage.py changepassword username
那么……继续。
进去后发现都是英文的,因为我们工作语言是中文,这就要改改了。在setting.py中:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
再登录就是中文了。
利用admin管理my_app
默认情况下只有一个用户授权的栏目。管理自己应用权限的话首先要建立一个app
python manage.py startapp my_app
然后就会有一个my_app文件夹了,在这个文件夹里,会自动生成几个文件。不过需要自己手动在setting.py中INSTALLED_APPS自己加入my_app。这样,再次进入admin的时候,程序会先扫到INSTALLED_APPS中的my_app,然后去my_app中读取admin的相关设置。最后就会多出一栏,my_app。
my_app里应该是空的,再里面添加内容就需要编辑my_app/admin.py。
在admin.py中的设置,其实是覆写了django/contrib/admin中的相关内容。至于这个django是在哪里。反正从pycharm中是External Libraries中site-package(library root)下面。我猜是如果使用pip命令安装的django的话,那个自动安装的地址吧。
在后台django/contrib/admin/templates/admin中,有许多网页,这些就是默认的admin界面中使用的网页模板。在自己的project中同样新建文件夹admin以及相关的网页就会让系统重载该网页。这样你就可以利用admin的后台逻辑去展示一个你自己喜欢的管理界面了。这种覆写是全局性的覆写,你如果进去那个目录就会发现,只有几个网页,内容都是渲染上去的,所以如果想针对某一个进行覆写还是需要配合admin.py的。
目前还没找到连逻辑都覆写的方法,目前的蠢方法是:先跳转到自己的这个页面,在自己这个页面中重新发送一个ajax请求到后端。(是不是有点蠢)
在admin.py中,有很多骚操作的。(这里慢慢更,毕竟我也菜的一批)
首先:必备的类:
from django.contrib import admin
之后,每个你希望在后台展示的数据模型,都需要自己先import进来。
然后开始创建类,每个类必须继承admin.AdminSite:
现在后台显示的title是后台管理,很low,改成自己的就需要创建一个类
这个可以让应用有一个自己的名字。
class MyAdminSite(admin.AdminSite):
site_header = "XXX后台"
site_title = "XXXX后台管理"
admin.site=MyAdminSite()
如果不用类,这样也行。
admin.site.site_header = 'XXXXX'
admin.site.site_title = '12345'
但是应用里的其他表单是不可以不用类的。
先放个官方文档,实在不行就去里面看看:https://docs.djangoproject.com/en/1.11/
然后再说说我目前已经用到的功能。
灵魂功能:
admin.site.register(models, Yourclass)
第一个参数是models中的类(就是你的数据),意味着你需要在后台对这个类进行维护。
第二个参数是在admin.py中自己声明的一个类,在这个类里可以对你的数据展示做一个规范。里面涉及到各种属性的设置。
简单先写几个我用到的设置
list_per_page 每页显示几条
list_display=["column name","your colunm"]在显示页面中显示哪几列数据,你已经要展示一个model了;这个model 里哪几列要展示。以一个数组的形式写出来就行了,或者你想自定义一列,可以把该列的组织方式以函数的形式声明,并把该函数名声明在这里。
class UserFrom(admin.ModelAdmin):
list_per_page = 10
list_display = ["username",'recoder']
def recoder(self,obj):
#obj
return format_html(<span>认证完成</span>)
recoder.short_description = '自定义表头'
这里我可研究了好久。首先,你自己定义的函数中可以放一个参数,obj,这个玩意你可以想象成是这一行的数据,如果你的自定义列需要和前几行的某个数据相关,那么这个就超有用了。在你的一同操作后,只需要返回就可以让你想显示的内容出现在自定义列中了。不过如果你想让它返回一个带有HTML的话,需要使用函数format_html(),并把自己的内容放在其中,这样你的内容就可以被前端解析了、
最后就是你的函数名+.short_description= ,就可以自己命名表头了。
书接上表,如果想针对某一个类设计自己独特的页面就需要使用属性
change_form_template = 'admin/user_change_form.html'
其中路径是从项目的template文件夹开始往下算的。
我估计后面害的更