zoukankan      html  css  js  c++  java
  • stark

    一、效果图

    二、数据列表

     知识点:

    完成
    list_display
    list_display_links

    1.根据str,拿字段对象,取中文
    val = self.model._meta.get_field(field).verbose_name

    2.模型名称,app名称
    model_name = self.model._meta.model_name
    app_lable = self.model._meta.app_label

    3.判断是否可调用
    if callable(field):
    val = field(self, header = True)

    4.字符串找对象得属性,反射
    val = getattr(data, field)

    5.返回标签
    return mark_safe("<input id='choice' type='checkbox'>")

    6.插入数组[]
    temp.append(ModelStark.checkbox)
    temp.extend(self.list_display)

    7.反向解析,含正则
    _url = reverse("%s_%s_delete" % (app_label, model_name), args=(obj.pk,))
    _url = reverse("%s_%s_add" % (app_label, model_name))

    8.复选框

    $('#choice').click(function () {
    if($(this).prop('checked')){
    $('.choice_item').prop('checked',true)
    }else{
    $('.choice_item').prop('checked',false)
    }
    })

    app01/stark.py

    # -*- coding:utf-8 -*-
    from stark.service import stark
    from .models import *
    
    
    class BookConfig(stark.ModelStark):
    
        list_display = ['title', 'price','publishDate']
        list_display_links = ['title']
    
    
    stark.site.register(Book, BookConfig)
    stark.site.register(Publish)
    stark.site.register(Author)
    stark.site.register(AuthorDetail)

    stark/service/stark.py

    from django.conf.urls import url
    from django.shortcuts import HttpResponse, reverse, redirect, render
    from django.utils.safestring import mark_safe
    from django.urls import reverse
    
    
    class ModelStark(object):
        list_display = ["__str__"]
        list_display_links = []
    
        def __init__(self, model, site):
            self.model = model
            self.site = site
    
        def edit(self, obj=None, header=False):
            if header:
                return "操作"
    
            _url = self.get_change_url(obj)
            return mark_safe("<a href='%s'>编辑</a>" % _url)
    
        def deletes(self, obj=None, header=False):
            if header:
                return '操作'
    
            _url = self.get_delete_url(obj)
            return mark_safe("<a href='%s'>删除</a>" % _url)
    
        def checkbox(self, obj=None, header = False):
            if header:
                return mark_safe("<input id='choice' type='checkbox'>")
            return mark_safe("<input class='choice_item' type='checkbox'>")
    
        def add_view(self, request):
            return HttpResponse('add_view')
    
        def delete_view(self, request, delete_id):
            return HttpResponse('delete_view')
    
        def change_view(self, request, change_id):
            return HttpResponse('change_view')
    
        def new_list_play(self):
            temp = []
            temp.append(ModelStark.checkbox)
            temp.extend(self.list_display)
            temp.append(ModelStark.edit)
            temp.append(ModelStark.deletes)
    
            return temp
    
        def get_change_url(self, obj):
            model_name = self.model._meta.model_name
            app_lable = self.model._meta.app_label
    
            _url = reverse("%s_%s_change" % (app_lable, model_name), args=(obj.pk,))
    
            return _url
    
        def get_delete_url(self, obj):
            model_name = self.model._meta.model_name
            app_label = self.model._meta.app_label
    
            _url = reverse("%s_%s_delete" % (app_label, model_name), args=(obj.pk,))
    
            return _url
    
        def get_add_url(self):
            model_name = self.model._meta.model_name
            app_label = self.model._meta.app_label
    
            _url = reverse("%s_%s_add" % (app_label, model_name))
    
            return _url
    
        def get_list_url(self):
            model_name = self.model._meta.model_name
            app_label = self.model._meta.app_label
    
            _url = reverse("%s_%s_list" % (app_label, model_name))
    
            return _url
    
        def list_view(self, request):
            data_list = self.model.objects.all()
    
            # 构建表头
            header_list = []
            # header_list = ['选择','pk',...'操作','操作']
            for field in self.new_list_play():
                if callable(field):
                    val = field(self, header = True)
                else:
                    if field == "__str__":
                        val = self.model._meta.model_name.upper()
                    else:  # 根据str 拿字段对象 取中文
                        val = self.model._meta.get_field(field).verbose_name
    
                header_list.append(val)
    
            # 构建表单
            new_data_list = []
            for data in data_list:
                temp = []
                for field in self.new_list_play():  # ['title','price'] 字符串找对象得属性 反射
                    print('field:', field)
                    if callable(field):
                        val = field(self, data)
                    else:
                        val = getattr(data, field)
    
                        if field in self.list_display_links:
                            _url = self.get_change_url(data)
                            val = mark_safe("<a href='%s'>%s</a>" % (_url, val))
    
                    temp.append(val)
    
                new_data_list.append(temp)   # [['yuan', 12], ['alex', 18], ['egon', 22]]
    
            return render(request, 'list_view.html',locals())
    
        def get_urls2(self):
            temp = []
    
            model_name = self.model._meta.model_name
            app_label = self.model._meta.app_label
    
            temp.append(url(r'add/', self.add_view, name="%s_%s_add" % (app_label, model_name)))
            temp.append(url(r'(d+)/delete/', self.delete_view, name="%s_%s_delete" % (app_label, model_name)))
            temp.append(url(r'(d+)/change/', self.change_view, name="%s_%s_change" % (app_label, model_name)))
            temp.append(url(r'^$', self.list_view, name="%s_%s_list" % (app_label, model_name)))
    
            return temp
    
        @property
        def urls2(self):
    
            return self.get_urls2(), None, None
    
    
    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)
    
    
        def get_urls(self):
            temp = []
            
            # 模型表,配置类对象
            for model, stark_class_obj in self._registry.items():
                model_name = model._meta.model_name
                app_label = model._meta.app_label
    
                # 分发增删改查
                temp.append(url(r'%s/%s/'%(app_label,model_name), stark_class_obj.urls2))
    
            return temp
    
        @property
        def urls(self):
    
            return self.get_urls(), None, None
    
    
    site = StarkSite()

     list_view.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
        <script src="/static/js/jquery-1.12.4.min.js"></script>
        <style type="text/css">
            
        </style>
    </head>
    <body>
    
    <h4>数据列表</h4>
    
    <div class="container">
        <div class="row">
            <div class="col-md-9">
                <table class="table table-bordered table-striped">
                    <thead>
                        <tr>
                            {% for item in header_list %}
                                <th>{{ item }}</th>
                            {% endfor %}
    
                        </tr>
    
                    </thead>
                    <tbody>
                        {% for data in new_data_list %}
                            <tr>
                                {% for item in data %}
                                    <td>{{ item }}</td>
                                {% endfor %}
    
                            </tr>
                        {% endfor %}
    
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    
    <script type="text/javascript">
        $('#choice').click(function () {
            if($(this).prop('checked')){
                $('.choice_item').prop('checked',true)
            }else{
                $('.choice_item').prop('checked',false)
            }
        })
    
    
    </script>
    
    </body>
    </html>
  • 相关阅读:
    SQL 通配符
    正则表达式
    与运算(&)、或运算(|)、异或运算(^)、右移运算符(>>>)本质介绍
    博客园博客目录自动生成(页面目录)
    Linux查看并杀死被占用的端口
    Eclipse的环境配置
    L-Rui
    Web页面弹出窗口代码大全
    linux-用户
    linux-网络
  • 原文地址:https://www.cnblogs.com/alice-bj/p/9210712.html
Copyright © 2011-2022 走看看