zoukankan      html  css  js  c++  java
  • xadmin 安装

    xadmin 安装

    环境(一定要一样)

    • Python 3.6.2
    • Django 2.0

    安装

    1. pip install django==2.0, 指定特定的版本
    2. pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2, 从官方的 github 上下载 django2 分支的包, 也可通将该包下载下来再使用 pip 安装, 但是不推荐使用 pip 安装, 建议将 xadmin 放到 libs 下
    3. 目录结构
    
    .
    ├── __pycache__
    │   └── manage.cpython-36.pyc
    ├── apps
    │   ├── __pycache__
    │   ├── food
    │   │   ├── __init__.py
    │   │   ├── __pycache__
    │   │   │   ├── __init__.cpython-36.pyc
    │   │   │   ├── admin.cpython-36.pyc
    │   │   │   ├── adminx.cpython-36.pyc
    │   │   │   ├── apps.cpython-36.pyc
    │   │   │   └── models.cpython-36.pyc
    │   │   ├── admin.py
    │   │   ├── adminx.py
    │   │   ├── apps.py
    │   │   ├── migrations
    │   │   │   ├── 0001_initial.py
    │   │   │   ├── __init__.py
    │   │   │   └── __pycache__
    │   │   │       ├── 0001_initial.cpython-36.pyc
    │   │   │       └── __init__.cpython-36.pyc
    │   │   ├── models.py
    │   │   ├── tests.py
    │   │   └── views.py
    │   └── user
    │       ├── __init__.py
    │       ├── __pycache__
    │       │   ├── __init__.cpython-36.pyc
    │       │   ├── admin.cpython-36.pyc
    │       │   ├── adminx.cpython-36.pyc
    │       │   ├── apps.cpython-36.pyc
    │       │   └── models.cpython-36.pyc
    │       ├── admin.py
    │       ├── adminx.py
    │       ├── apps.py
    │       ├── migrations
    │       │   ├── 0001_initial.py
    │       │   ├── 0002_auto_20190621_1320.py
    │       │   ├── __init__.py
    │       │   └── __pycache__
    │       │       ├── 0001_initial.cpython-36.pyc
    │       │       ├── 0002_auto_20190621_1320.cpython-36.pyc
    │       │       └── __init__.cpython-36.pyc
    │       ├── models.py
    │       ├── tests.py
    │       └── views.py
    ├── libs
    ├── manage.py
    ├── media
    ├── static
    ├── templates
    ├── utils
    │   └── __init__.py
    └── xadmintest
        ├── __init__.py
        ├── __pycache__
        │   ├── __init__.cpython-36.pyc
        │   ├── settings.cpython-36.pyc
        │   ├── urls.cpython-36.pyc
        │   └── wsgi.cpython-36.pyc
        ├── settings.py
        ├── urls.py
        └── wsgi.py
    

    配置

    1. 所有的 app 都在 apps 目录中, libs 存放第三方拷贝过来的库, 所以需要在 settings.py 中添加如下, 在 INSTALL_APPS 时可以直接写 app 名(推荐这样写, 不这样写可能会有错误)
    
    sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
    sys.path.insert(0, os.path.join(BASE_DIR, 'libs'))
    
    1. 在 settings.py 中的 INSTALL_APPS 添加 xadmin, reversion, crispy_forms

    2. 将 settings.py 中的语言设置成使其支持中文

      
      LANGUAGE_CODE = 'zh-hans'
      TIME_ZONE = 'Asia/Shanghai'
      USE_I18N = True
      USE_L10N = True
      USE_TZ = False # 设置为 False 则使用本地时间,否则会使用国际时间
      
    3. 如果使用 django 自带的用户模块, 还要在 settings.py 中添加 AUTH_USER_MODEL = 'user.UserProfile' 来说重载系统的 User, 其中 user 是 app 名, UserProfile 是该 app 下 models.py 文件中定义的继承了 django.contrib.auth.model.AbstractUser 的类的类名

    4. 将 url.py 中的 url 改为 path('xadmin/', xadmin.site.urls)

    5. 为每一个 model 配置一个 admin, 不再使用 admin.py 而是使用 adminx.py, 在 adminx.py 中使用, 和 admin.py 用法差不多, 我们只需要提供 list_display, search_fields, list_filter

    
    class UserAdmin(object):
    
        list_display = ['name', 'birthday', 'gender']
        search_fields = ['name', 'birthday', 'gender']
        list_filter = ['name', 'birthday', 'gender']
    
    # xadmin.site.register(UserProfile, UserAdmin), model 不能为 User, 因为内部已经使用了
    # 注意, 在扩展 Django 自带的 User 模块时, 需要设置 null=True, blank=True, 否则在之后的 ./manage.py createsuperuser 中会失败
    
    1. xadmin 还有一些全局配置, 一般就在继承了 AbstractUser 的 models 中定义
    
    class BaseSetting(object):
    
        enable_themes = True
        use_bootswatch = True
    
    
    class GlobalSettings(object):
    
        site_title = '我的管理后台'
        site_footer = '我的后台'
    
    xadmin.site.register(views.BaseAdminView, BaseSetting)
    xadmin.site.register(views.CommAdminView, GlobalSettings)
    
    1. 配置后台 app 显示中文, 在每一个 app 下的 __init__.py 中添加
    
    default_app_config = 'user.apps.UserConfig' # 这里的 user 为 app 名, UserConfig 为 apps.py 中的类的类名, 要在 UserConfig 中填写 name 和 verbose_name 两个属性, 其中 verbose_name 为中文
    
    1. 迁移数据库
    
    ./manage.py makemigrations && ./manage.py migrate
    
    1. 创建管理员用户
    
    ./manage.py createsuperuser
    
    1. 如果要在模型中使用富文本编辑器, 需要拷贝 DjangoUeditor(是百度的 Django 项目) 到 libs 中, 在 xadmin 中的 plugins 中添加 ueditor.py 的插件, 内容如下, 这是从一个人的博客derek中得到的, 在 model 中, 如果想要使用富文本域, 需要导入 UEditor 中的 UEditorField, 使用也在下面
    
    # libs/xadmin/plugins/ueditor.py
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    import xadmin
    from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView
    from DjangoUeditor.models import UEditorField
    from DjangoUeditor.widgets import UEditorWidget
    from django.conf import settings
    
    
    class XadminUEditorWidget(UEditorWidget):
    
        def __init__(self, **kwargs):
            self.ueditor_options = kwargs
            self.Media.js = None
            super(XadminUEditorWidget,self).__init__(kwargs)
    
    
    class UeditorPlugin(BaseAdminPlugin):
    
        def get_field_style(self, attrs, db_field, style, **kwargs):
            if style == 'ueditor':
                if isinstance(db_field, UEditorField):
                    widget = db_field.formfield().widget
                    param = {}
                    param.update(widget.ueditor_settings)
                    param.update(widget.attrs)
                    return {'widget':XadminUEditorWidget(**param)}
            return attrs
    
        def block_extrahead(self, context, nodes):
            print(settings.STATIC_URL)
            js = '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.config.js")
            js += '<script type="text/javascript" src="%s"></script>' % (settings.STATIC_URL + "ueditor/ueditor.all.min.js")
            nodes.append(js)
    
    
    xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView)
    xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)
    
    
    # apps/yourmodel/models.py
    
    class Food(models.Model):
    
        name = models.CharField(max_length=30, verbose_name='食品名称')
        price = models.FloatField(default=0, verbose_name='价格')
        brief = models.TextField(max_length=500, verbose_name='简介')
        description = UEditorField(verbose_name='内容', imagePath='food/images/', filePath='food/files/', default='')
        supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
    
        class Meta:
            verbose_name = '食品'
            verbose_name_plural = verbose_name
    
        def __str__(self):
            return self.name
    
  • 相关阅读:
    a标签跳转新页面
    js或jquery实现页面打印(局部打印)
    js实现点击定位最顶端
    js实现pdf对页面的打印
    js动态创建input
    sha1加密算法
    JsonHelper修改4.0
    List<T>做数据源绑定的问题
    VS2013智能提示
    Newtonsoft.Json(Json.Net)学习笔记
  • 原文地址:https://www.cnblogs.com/megachen/p/11074716.html
Copyright © 2011-2022 走看看