Django Admin 简单部署上线
前言
打算为公司弄一个管理公用密码的平台,由于比较懒,就选择使用Django admin,默认的admin并不漂亮,于是我使用了这个django-suit插件来美化
如图:
是不是比原来的漂亮多了。
美化admin
安装django-suit
pip install django-suit
- 配置settings文件
DEBUG = True ALLOWED_HOSTS = ['*', ] # 表示所有IP都可以访问,可添加多个域,这里一定要设定,不然django运行后在其他机器访问会出现400错误
INSTALLED_APPS = [ 'suit', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', ]
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = False USE_TZ = False DATETIME_FORMAT = 'Y-m-d H:i:s' DATE_FORMAT = 'Y-m-d'
SUIT_CONFIG = { # suit页面配置 'ADMIN_NAME': '密码管理系统', # 登录界面提示 'LIST_PER_PAGE': 10, # 分页,每页显示10条记录 'MENU': ( # 每一个字典表示左侧菜单的一栏,多个字典可显示多个左侧菜单栏 {'label': '密码管理', 'app': 'app01', 'models': ('app01.PwdInfo',)}, ), # label表示name,app表示上边的install的app,models表示用了哪些models }
- models.py表设计
class PwdInfo(models.Model): owner = models.CharField('所有者', max_length=128) ip = models.CharField('IP地址', max_length=2048) pwd = models.CharField('密码', max_length=32) comment = models.CharField('备注', max_length=1024, null=True, blank=True) u_time = models.DateTimeField('更新时间', auto_now_add=True) class Meta: verbose_name = '密码记录' verbose_name_plural = "密码详情"
- admin.py配置
from django.contrib import admin # Register your models here. from app01 import models from django.contrib.auth.models import User, Group class AuthorAdmin(admin.ModelAdmin): # 列表页,列表顶部显示的字段名称 list_display = ('id', 'owner', 'ip', 'pwd', 'comment', 'u_time') # 列表页出现搜索框,参数是搜索的关键字区域 search_fields = ('ip', 'owner') # fields 表示可以修改哪些内容 fields = ('owner', 'ip', 'pwd', 'comment') # 页面中的列表顶端会有一个逐层深入的导航条,逐步迭代选项 date_hierarchy = 'u_time' # 自然是排序所用了,减号代表降序排列 ordering = ('-u_time',) # 右侧会出现过滤器,根据字段类型,过滤器显示过滤选项 list_filter = ('u_time',) admin.site.register(models.PwdInfo, AuthorAdmin) # 注册数据库表 admin.site.unregister(User) # 取消注册User表 admin.site.unregister(Group) # 取消注册Group表,取消注册User和Group两张表后,首页的用户和组的APP将不再显示。
- apps.py设定
from django.apps import AppConfig class App01Config(AppConfig): name = 'app01' verbose_name = '密码管理' # 首页显示的app的名称
- app01下的__init__.py设定
default_app_config = 'app01.apps.App01Config'
- urls.py设定
from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$', admin.site.urls), # 直接访问根路径就可以跳转到首页 ]
- 其他admin小技巧,,admin自定义js或css,以实现一些自己想要的效果,admin.py设置
class DirectionAdmin(admin.ModelAdmin): list_display = ('describe', 'db_name') class Media: js = ('js/my_own_admin.js',) css = { 'all': ('css/admin/my_own_admin.css',) } admin.site.register(models.Direction, DirectionAdmin) # 然后把对应的js或css文件写入到static下边的指定文件里吧,运行admin的页面会额外引用你自己的css和js文件
部署到Centos线上环境
我这里因为用的人数比较少,所以直接把django project丢到服务器上运行了,如果人数多的话建议nginx+uwsgi+django。
- centos安装python3
由于centos默认没有python3,所以我们要自己安装一个。
安装过程中一定注意先装 sqlite-devel,不然运行django时会报 no module name _sqlite3错误
如果已经安装了python,需要先装sqlite-devel,然后再重新编译安装python
具体可参考我的另一篇博文:
- 运行django
python3 manage.py runserver 0.0.0.0:80 &
# 加&符号表示后台运行
一定记得关闭centos的iptables,不然从其他的地方可能无法访问你的网站。
/etc/init.d/iptables stop