• 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
  • 相关阅读:
    AppWidget应用(四)---PendingIntent 之 getService
    AppWidget应用(三)---PendingIntent 之 getBroadcast
    AppWidget应用(二)---PendingIntent 之 getActivity
    JZOJ 3231. 海明距离
    JZOJ 1422. 猴子摘桃
    JZOJ 1421. 二叉树
    SSLOJ 1318.地铁重组
    SSLOJ 1319.埃雷萨拉斯寻宝
    SSLOJ 1317.灵魂分流药剂
    SSLOJ 1316.血色先锋军
  • 原文地址:https://www.cnblogs.com/Apy-0816/p/11100260.html
Copyright © 2020-2023  润新知