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. python面向对象的三大特性

    一.继承 面向对象中的继承就是继承的类直接拥有被继承类的属性而不需要在自己的类体中重新再写一遍,其中被继承的类叫做父类.基类,继承的类叫做派生类.子类.在python3中如果不指定继承哪个类,默认就会 ...

  2. 在同一台电脑上部署多个tomcat服务器

    因为在写一些小的项目的时候,需要另外用到一台图片服务器,所以不得不开启多个tomcat了. 在这里我用的是tomcat 9.0,一个是正常时的tomcat,一个是图片服务器,在这里我就用tomcat1 ...

  3. 生成器-代码举例:()和yield

    怎么自定义一个生成器:两个方法: 1.小括号包裹表达式 2.函数中用yield返回 方法一:①小括号包裹表达式 G=(x*2 for x in range(5)) print(G)输出:<gen ...

  4. vue启动调试、启动编译的批处理

    Rundev.bat cd %~dp0npm run dev RunBuild.bat cd %~dp0npm run build

  5. linux 修改centos7的网卡ens33修改为eth0

    Linux 操作系统的网卡设备的传统命名方式是 eth0.eth1.eth2等,而 CentOS7 提供了不同的命名规则,默认是基于固件.拓扑.位置信息来分配.这样做的优点是命名全自动的.可预知的,缺 ...

  6. 关于ios下字体描边的一个细节

    转载请注明,来自:http://blog.csdn.net/skyman_2001    CGContextSetTextDrawingMode(context, kCGTextStroke);    ...

  7. what's the 回撤

    什么是“回撤”? “回撤”是个谓语,前面隐含了一个主语.一般来说,没有人说“亏损回撤”的,我们说的“回撤”,通常指“股价回撤”.“市值回撤”.“净值回撤”和“盈利回撤”. “股价回撤”是针对个股的,即 ...

  8. 万恶之源 - Python装饰器及内置函数

    装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...

  9. U盘安装ubuntu 16.04 遇到 gfxboot.c32:not a COM32R image boot 的解决方法

    从U盘启动的时候出现了gfxboot.c32:not a COM32R image的问题,经过研究发现按下Tab键,会出现live live-install check memtest hd main ...

  10. oracle新建表空间与用户

    例如:创建用户 cwbase1_9999 密码 gxtest  表空间 cwdata1 sqlplus / as sysdba 运行sql create tablespace cwdata1 logg ...