设为首页 加入收藏

TOP

快速实现增删改查组件(起步阶段!!!)(一)
2017-12-18 12:37:24 】 浏览:471
Tags:快速 实现 删改 组件 起步 阶段

一、相关知识点回顾

    1、什么是反射?

    可以用字符串的方式去访问对象的属性

 2、反射有四种方法?

hasattr(object,name):判断一个对象是不是有name属性或者方法
getattr:获取对象的属性或者方法,  需要注意的是,如果返回的是对象的方法,返回出来的是对象的内存地址, 如果需要运行这个方法,可以在后面添加一对()
setattr:给对象的属性赋值,如果属性不存在,先创建后赋值
delattr:删除该对象指定的一个属性

 3、创建ModelForm的两种方式

# 方式一定义ModelForm
   class TestModelForm(ModelForm):
         class Meta:
             model = self.model_class
             fields = "__all__"
        
   方式二定义
  Meta = type("Meta", (object,), {"model": self.model_class, "fields": "__all__"})
  TestModelForm = type("TestModelForm", (ModelForm,), {"Meta": Meta})

二、具体流程以及相关知识点

1、路由系统

让url对应视图,这时的视图可以是一个元组,元组的里面放三个参数,第一个是个列表,这两种表示方式都是一样的,用那种都行

namespace的用法如下

v =>  ([],None,None)  namespace(是第三个参数),用于区分相同name的url,通过namespace为url添加一个前缀

 如图:

namespace

流程:

首先创建三个应用
      app01
      app02
      strak

1、一旦运行的时候都会去执行admin.py ,现在我们让你开始执行stark.py 文件,加上下面的这些(参考的是admin的源码,在每一个admin文件的里面点击进入)

from django.utils.module_loading import autodiscover_modules

    class StarkConfig(AppConfig):
        name = 'stark' #应用名称

        def ready(self):
            autodiscover_modules('stark')   #在应用中创建的py文件和这个名字一样

切记一定要在sessings中配置一下:

'app02.apps.App02Config', 'stark.apps.StarkConfig',

2、然后再每个应用下面也创建一个stark.py的文件
       这样就像admin一样了,就开始执行site.redister了


3、这时候还没有site呢,需要自己实例化一个site
       在应用下创建一个service的文件夹,再创建一个v1.py文件,在里面写代码

4、在stark里面注册

需要注意的是:

v1.site.register(models.UserInfo)   
->  执行 StackConfig的 changelist_view方法/add_view....
        
        
    
class UserInfoConfig(v1.StarkConfig):
        def changelist_view(self,request,*args,**kwargs):
            return HttpResponse('你猜我是谁?')

v1.site.register(models.UserInfo,UserInfoConfig)

---> 优先查看自己config中是否存在方法,不存在则执行基类 StackConfig的 changelist_view方法/add_view....

如图:

5、注册完成之后走urls。仿照admin的urls.。。。v1.site.urls
6、完了在v1.py中写代码

class StarkSite(object):
    def __init__(self):
        self._registry ={}  #放置处理请求对应关系
        '''
        _registry = {
                    models.Role: StarkConfig(models.Role,v1.site),
                    models.UserInfo: StarkConfig(models.UserInfo,v1.site)
                    models.UserType: StarkConfig(models.UserType,v1.site)
                    models.Article: StarkConfig(models.Article,v1.site)
                }
        '''
    def register(self,model_class,stark_config_class=None):
        if not stark_config_class:
            '''stark_config_class是类对象,如果没有这个类就重新赋值,去执行StarkConfig'''
            stark_config_class = StarkConfig
        self._registry[model_class] = stark_config_class(model_class,self)
        #如果用户自己传进去类了,就用自己的,自己的需要继承StarkConfig。如果自己没有就找基类的,自己有就用自己的

    def get_urls(self):
        url_list = []
        for model_calss,stark_config_obj in self._registry.items():
            app_name = model_calss._meta.app_label#应用名称
            model_name = model_calss._meta.model_name#表的名称
            cur_url = url(r'^{0}/{1}/'.format(app_name,model_name),(stark_config_obj.urls,None,None))
            #这是的stark_config_obj是上面StarkConfig的实例对象。stark_config_obj.urls就会去找上面类的urls
            url_list.append(cur_url)
        return url_list
    @property #吧方法当属性来用
    def urls(self):
        return (self.get_urls(),None,'stark')  #第三个参数是namesapce

 动态生成类名和应用名图示:

 

在v1里面有两个类

- StarkConfig,用于为每一个类生成URL对应关系,并编写视图函数处理用户请求。
            [
                ^$  -> self.changelist_view
                ^add/$  -> self.add_view
                ^dele
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇从nginx日志原始二进制数据还原文.. 下一篇python 参数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目