1、首先,创建三个项目,app01,app02,stark,在settings里边记得配置。然后举例:在app01的model里边写表,用的db.sqlite3,所以数据库不用再settings里边配置。

from django.db import models

# Create your models here.

class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField() # 与AuthorDetail建立一对一的关系
authorDetail=models.OneToOneField(to="AuthorDetail", on_delete=models.CASCADE) def __str__(self):
return self.name class AuthorDetail(models.Model): nid = models.AutoField(primary_key=True)
birthday = models.DateField()
telephone = models.BigIntegerField()
addr = models.CharField(max_length=64) class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
email = models.EmailField() def __str__(self):
return self.name class Book(models.Model): nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
publishDate = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2) # 与Publish建立一对多的关系,外键字段建立在多的一方
publish=models.ForeignKey(to="Publish",to_field="nid", on_delete=models.CASCADE)
# 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
authors=models.ManyToManyField(to='Author',) def __str__(self):
return self.title

2、启动:类似于admin

在stark文件夹下的apps里边写:

from django.apps import AppConfig
# 经源码分析,admin就是这样先导入这个
from django.utils.module_loading import autodiscover_modules class StarkConfig(AppConfig):
name = 'stark' def ready(self):
autodiscover_modules("stark")

这是因为,程序一启动,先执行settings.py中的install_apps里边的模块。具体步骤详看有道云笔记。

3、注册以及url的设计

首先在stark的下边创建一个service包,创建一个sites.py,

里边放全局类以及默认配置类

from django.conf.urls import url
from django.shortcuts import HttpResponse, render, redirect class ModelStark(object):
"""
默认配置类
"""
list_display = [] def __init__(self, model):
self.model = model def listview(self, request):
print(self) # 当前访问模型表的配置类对象
print(self.model) # 当前访问模型表
data_list = self.model.objects.all()
print(self.list_display)
return render(request, "list_view.html", {"data_list": data_list}) def addview(self, request):
return HttpResponse("addview") def changeview(self, request, id):
return HttpResponse("changeview") def delview(self, request, id):
return HttpResponse("delview") def get_urls(self):
temp = [
url(r"^$", self.listview),
url(r"add/$", self.addview),
url(r"(\d+)/change/$", self.changeview),
url(r"(\d+)/delete/$", self.delview), ]
return temp @property
def urls(self):
return self.get_urls(), None, None class AdminSite(object):
"""
stark组件的全局类
""" def __init__(self):
self._registry = {} def register(self, model, admin_class=None):
# 设置配置类
if not admin_class:
admin_class = ModelStark
self._registry[model] = admin_class(model) def get_urls(self):
temp = []
for model, config_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), config_obj.urls))
# config_obj 获取的就是每个for循环中的BookConfig(Book),publish,author遍历的对象
'''
temp=[ #(1) url(r"app01/book/",BookConfig(Book).urls)
#(2) url(r"app01/book/",(BookConfig(Book).get_urls(), None, None))
#(3) url(r"app01/book/",([
url(r"^$", BookConfig(Book).listview),
url(r"add/$", BookConfig(Book).addview),
url(r"(\d+)/change/$", BookConfig(Book).changeview),
url(r"(\d+)/delete/$", BookConfig(Book).delview),
], None, None)) ########### # url(r"app01/publish/",([
url(r"^$", ModelStark(Publish).listview),
url(r"add/$", ModelStark(Publish).addview),
url(r"(\d+)/change/$", ModelStark(Publish).changeview),
url(r"(\d+)/delete/$", ModelStark(Publish).delview),
], None, None))
]
''' return temp @property
def urls(self):
return self.get_urls(), None, None site = AdminSite()

仿照admin实现一个自定义的增删改查的组件的更多相关文章

  1. day84-仿照admin实现一个自定义的增删改查组件

    一.admin的使用 app01的admin.py文件: class BookConfig(admin.ModelAdmin): list_display=[] list_display_links= ...

  2. BitAdminCore框架应用篇:(二)创建一个简单的增删改查模块

    NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/cookie ...

  3. Go Web --- 创建一个Article的增删改查

    掌握数据的增删改查之后,就可以做一些小demo,巩固一下基础,让语法更加熟练,所以下面是按照Go web编程里面的文章管理操作,写的一个代码: package main import ( " ...

  4. 自定义mvc增删改查

    对t_mvc_book表的增删改查 导入jar包 BaseDao package com.hmc.util; import java.lang.reflect.Field; import java.s ...

  5. 【良心保姆级教程】java手把手教你用swing写一个学生的增删改查模块

    很多刚入门的同学,不清楚如何用java.swing去开发出一个系统? 不清楚如何使用java代码去操作数据库进行增删改查一些列操作,不清楚java代码和数据库(mysql.sqlserver)之间怎么 ...

  6. 一个Servlet处理增删改查的方法

    处理的思路是在servlet中定义不同的增删改查方法,页面请求 的时候携带请求的参数,根据参数判断调用不同的方法. package cn.xm.small.Servlet; import java.i ...

  7. springboot+thymeleaf+springbootJPA实现一个简单的增删改查

    1.springboot是什么,给我们带来了什么方便? 通过阅读springboot的书籍发现springboot最便利的是为我们自动配置了很多的东西,几乎可以实现无xml,甚至简单的无sql,为我们 ...

  8. 使用Java实现对一个数组的增删改查以及初始化

    import java.util.*; import java.lang.*; public class Array { private int[] data;// 数组 private int si ...

  9. 使用ExtJS做一个用户的增删改查

    extjs版本为4.2,用户数据放在静态list中存储 User.java package com.ext.demo.dao; public class User { private int id; ...

随机推荐

  1. caffe matlab接口编译遇到的问题记录

    今天编译的过程中遇到的问题以及查阅到的资料,记录在这里,希望可以帮到其他人. BVLC的caffe源码,如果要编译matlab的接口时,首先需要将makefile.config文件中的matlab的安 ...

  2. JavaScript、关于元素的offset~和client~

    1.偏移量(offset dimension)   =>offsetLeft(元素距离其父元素左边框(/上边框)的距离) =>offsetTop =>offsetWidth(元素的宽 ...

  3. es中filter和query的对比

    1.filter与query示例PUT /company/employee/2{ "address": { "country": "china&quo ...

  4. 第八节:分支开发之合并到master

    流程:在客户端创建分支,修改代码,并push,然后在页面处理即可.(区别在于一个在客户端,一个在页面) 实际的开放中要记得打tag,不然到时候出问题了以后不知道从哪里开始.

  5. ubuntu上安装ftp

    为什么要安装ftp?为了方便在主机和虚拟机之间传文件 一般有两种做法: 一.使用VMware安装虚拟机后,可以直接继续安装VMware tools,就可以将主机上的文件拖到ubuntu虚拟机的某个目录 ...

  6. vue中computed和watch的用法

    computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理: computed比较适合对多个变量或 ...

  7. Repository mirror 解析

    1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...

  8. [php] 索引数组合并选择两数组相加

    header("Content-Type:text/html;charset=utf-8");$arr1= Array ( 0 => Array ( 'pic' => ...

  9. internal table operation

    1: the basic operation *&---------------------------------------------------------------------* ...

  10. syslog-ng 学习

    摘要:http://luyongxin88.blog.163.com/blog/static/925580720112275183903/ 因为工作的需要,涉及到了syslog-ng.现在看来,在外包 ...