django2.0+xadmin2.0d打造权限级管理后台【二】

Apache NIFI InvokeHTTP处理器实战:从核心配置到错误排查全解析 HTTP协议作为现代分布式系统间数据交换的基石,其核心在于通过请求-响应模型实现资源的获取与操作。在数据集成与ETL领域,Apache NIFI通过其可视化编排和强大的处理器生态,将复杂的HTTP通信封装为可配置的组件,极大地提升了数据流开发的效率和可靠性。InvokeHTTP处理器正是这一理念的集中体现,它不仅是NIFI与外部RESTful API、Web服务交互的桥梁,更内置了连接池管理、超时重试、SSL/TLS安全等工程实践所需的健壮性机制。无论是处理`unexpected status 502 ba 阅读详情

xadmin权限级店铺系统

  • 继承AbstractUser 控制auth表,这里面有一个问题,密码无法加密,到时候保存密码的时候调用make_password方法
  • from django.contrib.auth.hashers import make_password
  • make_password(password)
  • 做一个店铺表,然后,每一个表都关联店铺表,生成一个店铺字段,表示数据是谁创建的

# 店铺表
class MallShop(AbstractUser):
    name = models.CharField(max_length=20, blank=True, null=True, verbose_name='店铺名')
    openid = models.CharField(max_length=255, verbose_name='openid')
    shop_icon = models.ImageField(upload_to='shop/icon/', blank=True, verbose_name='店铺头像')
    infocode = models.CharField(max_length=20, unique=True, verbose_name='激活码')
    province = models.CharField(max_length=30, blank=True, null=True, verbose_name='省份')
    city = models.CharField(max_length=30, blank=True, null=True, verbose_name='城市')
    quxian = models.CharField(max_length=30, blank=True, null=True, verbose_name='区县')
    address = models.CharField(max_length=300, blank=True, null=True, verbose_name='地址')
    wtchat = models.CharField(max_length=30, blank=True, null=True, verbose_name='微信')
    addtime = models.DateTimeField(auto_now_add=True, verbose_name='激活时间')
    shop_turnover = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name='总营业额')
    total_expenditure = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name='总支出')
    qrcode = models.CharField(max_length=255, blank=True, verbose_name='二维码', help_text='用户扫码即可成为店铺会员')

    def show_photo(self):
        text = """<img src="%s" style="width:50px;"/>""" % self.shop_icon.url if self.shop_icon else ''
        return mark_safe(text)

    show_photo.short_description = '店铺头像'
    
    

# 用户管理
class MallUser(models.Model):
    shop = models.ForeignKey(to='MallShop', on_delete=models.CASCADE, editable=False, verbose_name='所属店铺')
    level = models.ForeignKey(to='UserClass', on_delete=models.SET_NULL, blank=True, null=True, verbose_name='用户级别')
    openid = models.CharField(max_length=255, verbose_name='openid')
    phone = models.CharField(max_length=11, unique=True, verbose_name='手机号')
    username = models.CharField(max_length=50, default='匿名用户', verbose_name='用户名')
    icon = models.CharField(max_length=255, blank=True, verbose_name='头像')
    gender = models.NullBooleanField(default=None, verbose_name='性别', choices=((None, '不详'), (True, '男'), (False, '女')))
    province = models.CharField(max_length=30, blank=True, null=True, verbose_name='省份')
    city = models.CharField(max_length=30, blank=True, null=True, verbose_name='城市')
    quxian = models.CharField(max_length=30, blank=True, null=True, verbose_name='区县')
    address = models.CharField(max_length=300, blank=True, null=True, verbose_name='地址')
    money = models.DecimalField(max_digits=10, decimal_places=2, default=0, verbose_name='余额')
    wechat = models.CharField(max_length=100, blank=True, verbose_name='微信')
    birthday = models.DateTimeField(default=None, blank=True, null=True, verbose_name='生日')
    age = models.CharField(blank=True, max_length=15, verbose_name='年龄')
    addtime = models.DateTimeField(auto_now_add=True, verbose_name='注册时间')
    consumption = models.IntegerField(default=0, verbose_name='消费指数', help_text='平均没人每月来的次数,大于5则高于平均指数,小于则低于平均指数')
    satisfaction = models.IntegerField(default=0, verbose_name='满意度', help_text='根据用户对服务的评价,5为最高,0为最低')

    def over_time_birthday(self):
        if self.birthday:
            month = now.month - self.birthday.month
            day = now.day - self.birthday.day
            if not month:
                text = "<p style='color:red'>会员还剩{}天生日<p/>".format(day)
            else:
                text = "<p style='color:red'>会员还剩{}月{}天生日<p/>".format(month, day)
            return mark_safe(text)
        else:
            return mark_safe("")

    over_time_birthday.short_description = '会员生日'
  • 创建AccessLevel表和ShopUserCreate表,让MallUserAdmin继承他,这样每次创建就保存好是哪个用户创建的,数据加载也只加载该用户创建的,如果还想看见其他人,则重新写过滤
class ShopUserCreate:
    def save_models(self):
        self.new_obj.shop = self.request.user
        super().save_models()


class AccessLevel:

    def get_model(self):
        return self.model_set

    def queryset(self):
        """改进权限级查看"""
        qs = self.request.user
        shopuser = MallShop.objects.get(username=qs)
        if shopuser.is_superuser:
            return self.model._default_manager.get_queryset()
        else:
            return self.get_model().objects.filter(shop=qs)


class MallUserAdmin(AccessLevel, AllowDelete, ShopUserCreate):
    # 设置显示字段
    list_display = ['show_photo', 'shop_username', 'level', 'phone', 'money', 'username', 'gender',
                    'over_time_birthday', 'province', 'city',
                    'quxian', 'address', 'wechat', 'age', 'addtime', 'consumption',
                    'satisfaction', 'ope_balance']
    # 设置搜索字段
    search_fields = ['id', 'phone', 'username']
    # 设置过滤字段
    list_filter = ['gender', 'province', 'city', 'quxian', 'birthday', 'age', 'consumption', 'satisfaction']
    model_icon = 'fa fa-team'
    # list中哪个字段带链接,点击可以进入编辑
    list_display_links = ("phone",)
    # 显示还原按钮,删除修改的信息可以还原
    reversion_enable = True
    #  列聚合,可用的值:"count","min","max","avg",  "sum"
    # aggregate_fields = {"id": "max"}
    show_detail_fields = ['phone']
    show_all_rel_details = True
    # list页面直接编辑
    list_editable = (
        'province', 'city', 'quxian', 'wtchat', 'birthday', 'gender', 'username'
    )
    # 自动刷新
    refresh_times = (3, 5, 10)
    # 添加数据时候,一步一步提供数据
    # wizard_form_list = [
    #     ("基础信息", ("username", "password", "openid", "shop_icon", "infocode")),
    #     ("其它信息", ("last_login", "is_superuser", "name", "province", "city", "quxian", "wtchat")),
    # ]
    # 排序
    ordering = ['-consumption']

    # 不显示字段
    exclude = ['shop']

    is_addbalance = True

    # 自读字段
    readonly_fields = ['satisfaction', 'consumption', 'addtime', 'money', 'icon', 'shop']

    # 添加过滤(这里是过滤日期)
    ate_hierarchy = ['addtime']

    model_set = MallUser

    #  从‘多选框’的形式改变为‘过滤器’的方式,水平排列过滤器,必须是一个 ManyToManyField类型,且不能用于 ForeignKey字段,默认地,管理工具使用`` 下拉框`` 来展现`` 外键`` 字段
    # filter_horizontal = ('authors',)

    def shop_username(self, obj):
        return '%s' % obj.shop.name if obj.shop.name else obj.shop.username  # ☆☆☆☆☆

    shop_username.short_description = '店铺'

    # 重写formfield_for_dbfield,设计add和edit表单
    def formfield_for_dbfield(self, db_field, **kwargs):
        if not self.request.user.is_superuser:
            # 对case这个表项的下拉框选择进行过滤

            if db_field.name == "level":
                kwargs["queryset"] = UserClass.objects.filter(shop=self.request.user).order_by('id')

            # if db_field.user_service == "user_service":
            #     kwargs["queryset"] = UserExpend.objects.filter(shop=self.request.user).order_by('id')
            #
            # if db_field.name == "user_service":
            #     kwargs["queryset"] = UserExpend.objects.filter(shop=self.request.user).order_by('id')
            # 对assigned_recipient这个表项的下拉选择进行过滤
            # 并且需要用到外键
            # if db_field.name == "assigned_recipient":
            #     stu_ids = StudentDoctor.objects.filter(doctor=self.request.user).values('student_id')
            #     ids = []
            #     # 这里使用循环,为了下方再次查询时在list中使用in
            #     for id in stu_ids:
            #         ids.append(id['student_id'])
            #     # 根据主键在ids列表中查询得到Queryset。注意kwargs["queryset"]一定是queryset
            #     kwargs["queryset"] = User.objects.filter(pk__in=ids)
            return db_field.formfield(**dict(**kwargs))

        else:
            attrs = self.get_field_attrs(db_field, **kwargs)
            return db_field.formfield(**dict(attrs, **kwargs))
  • 插件开发
  • 注册插件 然后在你的静态文件下建立 xadmin/js/plug_in_name.js 我这里写的是js插件,然后你去写自己的js文件就行了 is_addbalance = True 表示开启,Flase 表示关闭
class AddBalance(BaseAdminPlugin):
    """给用户增加余额"""
    # 默认不加载,只在需要加载的options中设置True来加载
    is_addbalance = False

    def init_request(self, *arg, **kwargs):
        return self.is_addbalance

    def get_media(self, media):
        # 此处用来加入我们自己的js文件

        media = media + self.vendor("xadmin.self.addbalance.js")
        return media


xadmin.site.register_plugin(AddBalance, ListAdminView)

  • 这里有一个问题 会出来两个提示 我们需要修改一下代码 ## 抱歉,不能这样写,会影响其他的post_response方法,我有比较好的方法, xadmin/views/edit.py 425行代码 直接修改,不要搬到项目下
    在这里插入图片描述
  • 我们找到源码 xadmin/views/edit.py 425行 我们把源码复制到我们的代码里 设置is_msg 如果我们发送了消息 则改成Flase
 @filter_hook
    def post_response(self):
        """
        Determines the HttpResponse for the add_view stage.
        """
        request = self.request

        msg = _(
            'The %(name)s "%(obj)s" was added successfully.') % {'name': force_text(self.opts.verbose_name),
                                                                 'obj': "<a class='alert-link' href='%s'>%s</a>" % (self.model_admin_url('change', self.new_obj._get_pk_val()), force_text(self.new_obj))}

        if "_continue" in request.POST:
            self.message_user(
                msg + ' ' + _("You may edit it again below."), 'success')
            return self.model_admin_url('change', self.new_obj._get_pk_val())

        if "_addanother" in request.POST:
            self.message_user(msg + ' ' + (_("You may add another %s below.") % force_text(self.opts.verbose_name)), 'success')
            return request.path
        else:
        	# 我们发过了就把 is_msg 改成False,这样系统就不会在调用一次
            if self.is_msg:
                self.message_user(msg, 'success')
            # Figure out where to redirect. If the user has change permission,
            # redirect to the change-list page for this object. Otherwise,
            # redirect to the admin index.
            if "_redirect" in request.POST:
                return request.POST["_redirect"]
            elif self.has_view_permission():
                return self.model_admin_url('changelist')
            else:
                return self.get_admin_url('index')
   

关于xadmin的过滤大家应该也知道,我上面也说了,重写formfield_for_dbfield方法就可以,然后需求来了,inlines里面的内容怎么过滤,我看了一下,光重写formfield_for_dbfield是不行的,然后我追踪源码,查到inlines调用了xadmin/views/edit.py 90行的formfield_for_dbfield方法,然后我就在这个方法里 加上了
if db_field.name == "filename":
 kwargs["queryset"] = model.objects.filter()

然后在导入model,重启一下ok了,我这个提供三种思路,第一个重写源码,第二个改写调用方法,把方法写道adminx.py里,还有就是把整个类提出来重写,我挑了里面最简单,改动最少的。

写完了,关于xadmin也算是有一定了解了项目也已经开源了,有兴趣的可以拿下来看一下
https://github.com/Anning01/shopsystem

Django2集成xadmin详解-1-安装Django和xadmin 一 概述 Django是一款基于python语言的开源Web开发框架。Django框架有一个强大的后台管理系统“admin”,只需要少量的代码,admin就能生成相应库表的增删改查操作界面。 Django GitHub地址https://github.com/django/django xadmin是Django后台管理系统admin的一个替换方案,xadmin对admin做了一些扩展, 阅读详情

相关推荐

x-admin 2.2 最新版本下载

前端 x-admin,前端框架,x-admin 2.2,x-admin

Django行权限管理(Xadmin+rules级联效果)

行权限配置 xadmin中配置且不需要数据库支持, 安装并配置rules pip安装: pip install rules 配置settings.py # settings.py INSTALLED_APPS = ( # ... 'rules', ) AUTHENTICATION_BACKENDS = ( 'rules.permissions.ObjectPermissi...

Yshencu的博客 1295

xadmin用于django2.0以上

django >=2 django-crispy-forms >=1.6.0 (For xadmin crispy forms) django-reversion ([OPTION] For object history and reversion feature, please select right version by your django, see changelog ) django-formtools ([OPTION] For wizward form) xlwt ([OPTION] For export xls files) xlsxwriter ([OPTION] For export xlsx files) 下载后请安装相关模块,并解压将xadmin文件复制到django项目中 并将xadmin,crispy-forms添加到settings.INSTALLED_APPS 中

Django设置权限管理

django实现不同用户访问不同的网页,只有拥有特定权限的用户才能访问对应的网页

gongzairen的博客 5576

等保2.0下可信验证的动态实现与合规实践

本文深入解读等保2.0标准中的“可信验证”要求,并重点探讨其动态实现与合规实践。文章阐述了从可信根、信任链到动态验证的核心概念,拆解了不同安全等级的实施差异,并提供了从硬件选型、软件赋能到平台集成的四步落地指南。通过行业案例与避坑心得,为构建覆盖计算环境、区域边界、通信网络和安全管理中心的全链条可信防御体系提供了实用参考。

d3e4f的博客 829

【银河麒麟服务器】银河麒麟V10 SP3高级服务器操作系统网卡配置完全指南:图形界面、Network、NetworkManager、IP 地址、路由与端口聚合详解

本文系统介绍了银河麒麟V10SP4服务器操作系统的网络配置方法,涵盖图形界面、NetworkManager、nmcli命令行等多种配置方式。重点讲解了IP地址设置、路由管理以及端口聚合(Bonding)的实现,包括传统配置文件、nmcli和nmtui三种Bonding配置方案。文章对比了NetworkManager与传统network服务的区别,并提供了常见网络问题的排查建议。通过多种配置方法的详细说明,帮助用户掌握银河麒麟服务器系统的网络管理技能,构建稳定可靠的网络环境。

YHLCCY的博客 5402

Django+vue3权限菜单rabc设计和动态路由

最重要的menu表已经设计完成,那么接下来就更简单了,还需要一个获取所有路由的方法,当添加权限的时候,可以方便的选择相应的路由权限。权限控制的话,可以基于Django的permission进行控制,并通过访问api的URL操作。因此,需要对menu表进行设计,由于涉及到了前端vue路由,因此,menu模型字段比较多,如下。前端是基于pure-admin二次开发的, 省去了前端开发,直接上手。本次是基于Django和vue实现。服务器设计及部分代码。

第九系艾文 2272

CRC校验查表法详解

CRC校验的查表法理解算法原理基础计算查表法原理及计算查表法中的表CRC校验中数据逆序CRC校验中的其它参数 算法原理 CRC(Cyclic Redundance Check)循环冗余校验,是基于某个多项式计算出一组校验码,用于核对数据传输过程中是否被更改或传输错误 基础计算 假设需要检验的数据 g :10100111,这串二进制码可以表示为代数多项式g(x) = x^7 + x^5 + x^2 + x +1, 而作为除数的多项式 h(x) 可以自由选择或者按照国际标准选择,一般h(x)的阶数如果是m

boom的博客 1万+

(下)django-xadmin核心功能类视图分析(源码解读)

https://blog.csdn.net/bocai_xiaodaidai/article/details/94579715我的这篇文章详细分析了xadmin的路由分发系统和类视图动态生成过程。那么生成的类视图的属性和方法是如何被赋予的呢?本文将详细介绍xadmin涉及到的几个类视图关系和作用。 一、先来看下xadmin类视图的继承关系: BaseAdminObject: ...

bocai_xiaodaidai的博客 1449

uniapp [微信小程序] - 详解微信小程序端接入mqtt全流程及示例源码教程,uniApp微信小程序端如何接入MQTT插件并实现连接/断开+发布订阅+消息队列+离线重连等各种示例代码(开箱即用)

uniapp微信小程序接入MQTT,uniapp中使用mqtt,uniapp 微信小程序端接入mqtt示例代码教程,适用于微信小程序的MQTT插件,uniapp开发微信小程序连接mqtt,uniApp微信小程序接入MQTT协议,uniapp vue3微信小程序使用MQTT的小例子接入流程,使用uniapp开发小程序接入mqtt,如何在uniapp项目中使用mqtt,uniapp mqtt的使用示例,mqtt连接报错,如何在项目里集成mqtt,Mqtt协议,主动连接mqtt,订阅消息,实现发布,订阅和接收消息

🏆 前端领域优质创作者 2884

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

如何读取ECU中指定内存地址的数据?图解UDS 0x23服务带你快速上手!!

车载系统攻城狮 2623

django2.0+xadmin2.0d打造权限级管理后台【一】

【需求】:不同用户登录得到不同数据,每个用户看到的数据只能是自己创建的,或者是最高管理员创建的,最高管理员可以看到所有人的数据。 【使用技术栈】:Django2.0.7【注意一定要2.0版本的】+ Xadmin-django2 + python3.6 + pycharm 这篇文章是我项目昨晚写下来的,里面很多坑点,到最后也没搞完,而是使用插件去掉了BUG,如果能帮到你,帮我点个赞呗。 ...

Python_anning的博客 6789

把 ABAP Unit 测试放进本地类:让重构更安全、让测试更好找的组织方式

ABAP测试代码组织策略:单元测试与集成测试的合理存放位置 本文针对ABAP开发中测试代码组织混乱的问题,提出了一套系统化的解决方案: 单元测试应存放在被测类的本地测试include中(...CCAU或...T99),确保测试与代码同步演进且易于发现 跨对象测试(组件/集成/系统测试)应创建单独的全局测试类,并通过FOR TESTING和ABSTRACT进行防护 使用! @testing注释建立测试关系,使测试与被测对象明确关联,提高可发现性 针对不同技术栈(RAP/CAP/OData)提供了具体落地建议,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1732

终极Xadmin教程:10分钟打造专业级Django后台管理系统

想要为你的Django项目打造一个既美观又强大的后台管理界面吗?Xadmin正是你需要的完美解决方案!作为Django admin的直接替代品,Xadmin基于Twitter Bootstrap构建,提供丰富的插件支持和现代化的用户界面,让后台管理变得简单高效。 ## 🚀 Xadmin是什么? **Xadmin** 是一个功能强大的Django后台管理系统,它完全兼容原生Django adm

gitblog_00785的博客 488

题解:洛谷 P14357 [CSP-J 2025] 拼数

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。小 R 想知道,在他所有能拼成的正整数中,最大的是多少。你需要帮助小 R 求出他能拼成的正整数的最大值。小 X 给了小 R 一个字符串。输出一行一个正整数,表示小 R 能拼成的正整数的最大值。中的任意多个数字,按任意顺序拼成一个正整数。,表示小 X 给小 R 的字符串。#普及-# #其他排序#洛谷:[P14357。

团爸讲算法 1397

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置...

第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置   软件版本  uwsgi-2.0.15nginx-1.12.1   1.用Navicat Premium远程登录Linux系统数据库,创建网站需要的数据库   2.数据库创建好后,将开发环境的数据库传输到刚才创建的数据库...

weixin_34343689的博客 208

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6...

第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6   1.检测系统是否已经安装过mysql或其依赖,若已装过要先将其删除,否则第4步使用yum安装时会报错: [root@192 ~]# yum list installed | grep mysql mysql-libs.x86_64 5.1.71-1.el6 ...

weixin_34153893的博客 119

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

django xadmin 隐藏菜单栏右侧的数字图标标签,或自定义标签

大前提 有时候会觉得右侧这数字很多余,不想要,方法如下 先找到xadmin库的目录,然后找到templates-xadmin-includes-sitemenu_accordion.html,打开 大概在11行,找到这一行,所有的改动都是针对这一行的。 <span class="badge badge-info">{{ item.menus|length }}</span&gt...

ch_improve的博客 1万+

Django-Xadmin 自定义菜单

Xadmin 默认是通过注册到 xadmin的模型生成菜单的,如果我们要加入自己的菜单怎么做呢 ? 在 某个 app下 adminx.py的某个 模型管理器 重写 get_site_menu(self) : 中写入菜单结构数据,然后将这个模型注册管理views.CommAdminView就行(默认是将自定义的放在菜单第一项,然后加上通过模型自动生成的菜单): 例如:         ...

weixin_30399871的博客 514

DRF ~ day11 之 基于角色的访问控制、django的权限演示、权限控制、simple-ui的使用、django-vue-admin演示

DRF ~ day11 之 基于角色的访问控制、django的权限演示、权限控制、simple-ui的使用、django-vue-admin演示

weixin_55672697的博客 1746

python测试开发django-44.xadmin自定义菜单项

前言 xadmin后台的菜单项是放到一个app下的,并且里面的排序是按字母a-z排序,有时候我们需要划分多个项,需要自定义菜单列表,可以通过重写CommAdminView类实现。 xadmin后台提供了多个主题,可以通过use_bootswatch=True设置多个主题。 自定义菜单项 先定义get_site_menu方法,重写CommAdminView里面的get_site_menu方法,并返回...

weixin_30892987的博客 306

【Django学习笔记】10:引入XAdmin后台管理系统,创建用户模型

简述 XAdmin是在Django强大的Admin后台管理基础上开发的一个第三方库,用于代替Admin,其界面更加舒适,功能更加强大。 不论是使用Admin还是XAdmin,既然是后台管理,就要涉及到超级用户,也就涉及到了用户表,所以这里在使用时还要定义好用户Model。 安装 安装适合于Django2的XAdmin: pip install https://codeload.github.com...

大桔骑士的学习笔记 2399

Django 2.0 加xadmin踩的坑

如果是django2.0 必须下载xadmin2.0 不然很多地方不兼容  xadmin2.0下载地址 https://github.com/sshwsfc/xadmin/tree/django2 然后下载到本地 通过pip install xadmin本地地址 比如 xadmin包在 C:\Users\ASUS\Desktop\xadmin-django2.zip 就

Cand6oy的博客 7090

python+django2.0+xadmin2.0配置

我这里没有提供xadmin。只是写了xadmin的安装过程,先要下载xadmin的源码到本地,一定要是xadmin2.0或以上的,django也是2.0或者以上,两者相配。下载下来的xadmin大概是这个样子。可以只取这部分,到你的项目中,新建一个extra_apps 的文件夹把它放到下面,然后先运行,不慌迁移数据,报一个错就解决一个,到最后再迁移数据。 这是第一次运行时报的错 安装...

qq_37195486的博客 1154

Xadmin-Xadmin的安装与配置(Django2.0+python3.6)

最近在学习Django,先使用Xadmin框架,在网上寻找Django 2.0以上的安装操作,好多都是不可以的,几经波折终于成功,于是写下此篇文章献给同样受折磨的你。 本人环境 win10+Anaconda3(python3.6)+Django2.0.2+pycharm3.3 1.xadmin的下载 源码包下载地址: https://github.com/sshwsfc/xadmin/tr...

关注网络安全、云原生安全 1万+
上一篇: django正反向以及无关联数据表序列化的问题
下一篇: djang 模板语法大全
Python_anning
博客等级 码龄9年 1409粉丝 27原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值