zoukankan      html  css  js  c++  java
  • Python学习第153天(Django之xadmin)

    什么是xadmin:

      网上有很多定义和解释,基本上都让不了解xadmin的人看完了更迷糊!既然是解释,就要让读者能一下子明白嘛!

      xadmin在python的领域就相当于php领域的dz论坛和WordPress的高度可定制版后台!

      更通俗点讲,xadmin就像是你的qq空间,但是比qq空间的可定制化高一千倍,能够方便的管理你的各种数据(类比于你qq空间中的日志、说说、签名、照片……)

    1.django2下安装xadmin

     1.xadmin的django2下载地址:https://github.com/sshwsfc/xadmin/tree/django2

     2.打开地址→确认下载的是django2的,点击Clone or download→点击Download ZIP→选择下载到一个没有中文的目录下→点击下载

    3.打开Terminal执行安装命令:

    pip install --cache-dir
    pip install d:/xadmin-django2.zip

    4.安装一些必要的库文件:

    pip crispy_forms
    pip reversion

    5.打开settings.py 找到INSTALLED_APPS 追加:

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'yanzheng.apps.YanzhengConfig',
     #追加代码:   
        'xadmin',
        'crispy_forms',
        'reversion',
    ]

    6.给urls.py中增加两行代码,就算是给xadmin配置路由了:

    from django.contrib import admin
    from django.urls import path
    #引入xadmin
    import xadmin
    
    urlpatterns = [
        path('admin/', admin.site.urls),
     #配置xadmin路由   
        path('xadmin/', xadmin.site.urls),
    ]

    7.安装配置好了,不要忘了更新数据库,打开Terminal,执行经典的两条命令:

    python manage.py makemigrations
    python manage.py migrate

    8.重新运行项目,浏览器访问http://127.0.0.1:8000/xadmin/  即可看到xadmin的登录界面(上次登录admin的时候如果没注销登出,因为cookie的缘故,会直接出现已经登录的界面。)

    2.django2下配置xadmin

    1.至此成功登录了,但是由于后面还要自定义一些xadmin的插件(比如一键导出生成的卡密插件),所以要将xadmin导入项目中:

    1.在项目netauth目录下,新建apps和extra_apps,将yanzheng拖入apps目录下。

    2.在d盘目录下找到下载的xadmin-django2.zip,右键解压文件→确定,解压后的文件夹中,找到xadmin-django2/xadmin-django2目录下的xadmin文件夹,复制到项目中extra_apps目录下,注意Search for reference 和Open moved files in editer 都不要勾选!

    3.extra_apps右键→Mark Directory as→Sources Root(对apps目录也要做同样的事

    4.在settings.py 中,找到:BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))),import sys 添加补全代码为:

    import os,sys
    
    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.insert(0,os.path.join(BASE_DIR,'apps'))
    sys.path.insert(1,os.path.join(BASE_DIR,'extra_apps'))

    .5.打开Terminal终端,卸载最先安装的xadmin

    pip uninstall xadmin
    y

    不要觉得先安装,又导入,又卸载,这个过程有什么可以省略的,一步也不能少,不然掉到坑里,爬不上来哦。

    数据库开发

    1.在apps/yanzheng/models.py中,将网络验证相关的表建完(其实就俩表,还都很简单):

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    from datetime import datetime
    # Create your models here.
    
    
    class UserProfile(AbstractUser):
        is_ban=models.BooleanField(default=False,verbose_name='是否被禁')
        end_time=models.DateTimeField(default=datetime.now, verbose_name='到期时间')
    
        class Meta:
            verbose_name='用户信息'
            verbose_name_plural=verbose_name
        def __str__(self):
            return self.username
    
    
    class Cards(models.Model):
    
        """充值卡"""
        user=models.ForeignKey(UserProfile,verbose_name='使用者',on_delete=models.CASCADE)
        kacode=models.CharField(max_length=50,verbose_name='卡密',default='')
        time=models.IntegerField(default=3600,verbose_name='时长')
        is_used=models.BooleanField(default=False,verbose_name='是否已经使用')
        add_time=models.DateTimeField(default=datetime.now,verbose_name='生成时间')
        class Meta:
            verbose_name='卡密'
            verbose_name_plural=verbose_name
        def __str__(self):
            return self.kacode

    打开Terminal,执行数据更新命令:

    python manage.py makemigrations
    python manage.py migrate

    这里有一个坑:

      数据更新的时候,如果数据类中,有DateTimeField字段,只能在第一次创建时,数据更新命令能成功,如果已经执行了数据更新命令,再修改DateTimeField字段的默认值,就会时间格式不对的错误,很烦人!

      解决办法:将apps/yanzheng/makemigrations目录下,除了__init__.py以外的文件都删掉,再执行数据更新命令,就可以了。

     

    最近没有什么系统性的知识,很多碎片,所以明天应该根据所写的项目进行一下简单的总结。

  • 相关阅读:
    转载:Python十分钟入门
    Think Python: How to Think Like a Computer Scientist
    LeetCode(34):搜索范围
    LeetCode(33):搜索旋转排序数组
    LeetCode(32):最长有效括号
    LeetCode(31): 下一个排列
    LeetCode(30):与所有单词相关联的字串
    LeetCode(29): 两数相除
    LeetCode(28): 实现strStr()
    LeetCode(27): 移除元素
  • 原文地址:https://www.cnblogs.com/xiaoyaotx/p/13510394.html
Copyright © 2011-2022 走看看