zoukankan      html  css  js  c++  java
  • Django基于admin的stark组件创建(一)

    首先创建一个名为stark_test的Django项目,创建2个app一个名为app01用来测试stark组件,一个就叫做stark,用来放stark组件

    如图:

     我们这里使用的是Django自带的数据库,因为没什么影响,如果你想使用其他数据库也是一样的。

    创建好项目后,就要思考一下,你想想Django项目app里面有个admin.py文件每次你启动的时候都会自动执行这个文件。所以我们也要创建一个类似的文件,我们创建名字为stark.py ,然后就要添加让其自动执行这个文件的方法了。

    我们通过进去admin里面可以发现是这里面的代码使其能够自动执行admin.py .如图:

    我们也可以在stark里面的apps.py 里面添加以下代码用来实现其功能

    from django.apps import AppConfig
    # 导入模块
    from django.utils.module_loading import autodiscover_modules
    
    class StarkConfig(AppConfig):
        name = 'stark'
        # 启动Django时如果有ready方法会执行里面的代码
        def ready(self):
            autodiscover_modules('stark') # stark为要执行的py文件。

    然后我们测试一下是否能自动执行。我们在app01下创建一个stark.py 文件在里面添加print("stark run!!!"),然后启动项目。发现能在启动时打印出stark run!!!了。如图:

    然后我们就可以仿照admin源码进行编写我们的stark代码了。

    首先在stark目录下创建一个名为services的python包。在里面创建一个stark.py文件。:

    我们要在这里面编写仿照admin的代码():

    # 默认的样式。这里没怎么完善的
    class ModelStark(object):
        def __init__(self, model, site):
            self.model = model
            self.site = site
    
    
    # 自己编写一个类。仿照admin的结构
    class StarkSite(object):
        def __init__(self):
            self._registry = {}
    
        def register(self, model, stark_class=None):
            # 判断是否有自定义的样式
            if not stark_class:
                stark_class = ModelStark
            self._registry[model] = stark_class(model, self)
    
    # 形成单例模式(模块的单例模式)
    site = StarkSite()
    

    写完这里后,就要注册一下了。但是注册前要创建数据表用来测试。在app01的models.py里面创建一个表用来测

    from django.db import models
    
    # Create your models here.
    
    class UserInfo(models.Model):
        name = models.CharField(max_length=32)
        age = models.IntegerField()

    然后进行makemigrations和migrate。生成表。

    然后就进行注册了。没使用的注册:

    # -*- coding: utf-8 -*-
    # @Time    : 2019/4/11 下午 9:52
    # @Author  : lh
    # @Email   : 2470937072@qq.com
    # @File    : stark.py
    # @Software: PyCharm
    
    from stark.service.stark import site, ModelStark
    from .models import *
    
    
    # # 自己定义样式不使用ModelStark的自带样式
    # class UserInfoConfig(ModelStark):
    #     pass
    
    
    # 就像注册admin那样注册表进site里面
    # site.register(UserInfo, UserInfoConfig)
    site.register(UserInfo)
    print(site._registry)

    我们先看看没有使用stark的效果。

    把表注册进去。在app01的stark.py 里面编写:

    # -*- coding: utf-8 -*-
    # @Time    : 2019/4/11 下午 9:52
    # @Author  : lh
    # @Email   : 2@qq.com
    # @File    : stark.py
    # @Software: PyCharm
    
    from stark.service.stark import site, ModelStark
    from .models import *
    
    
    # 自己定义样式不使用ModelStark的自带样式
    class UserInfoConfig(ModelStark):
        pass
    
    
    # 就像注册admin那样注册表进site里面
    site.register(UserInfo, UserInfoConfig)
    print(site._registry)

    然后重启项目你会发现使用的是自己定义的样式:

    这就是最基础的stark搭建了。功能后面再完善

    从csdn搬家过来的可能没有图片,原地址https://blog.csdn.net/weixin_38091140
  • 相关阅读:
    Windows Server 2012配置开机启动项
    Windows Server 2019 SSH Server
    NOIP2017 senior A 模拟赛 7.7 T1 棋盘
    Noip 2015 senior 复赛 Day2 子串
    Noip 2015 senior复赛 题解
    Noip 2014 senior Day2 解方程(equation)
    Noip 2014 senior Day2 寻找道路(road)
    Noip 2014 senior Day2 无线网络发射器选址(wireless)
    Noip2014senior复赛 飞扬的小鸟
    Noip 2014 senior 复赛 联合权值(link)
  • 原文地址:https://www.cnblogs.com/Apy-0816/p/11100260.html
Copyright © 2011-2022 走看看