仿照admin实现一个自定义的增删改查的组件
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实现一个自定义的增删改查的组件的更多相关文章
- day84-仿照admin实现一个自定义的增删改查组件
一.admin的使用 app01的admin.py文件: class BookConfig(admin.ModelAdmin): list_display=[] list_display_links= ...
- BitAdminCore框架应用篇:(二)创建一个简单的增删改查模块
NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/cookie ...
- Go Web --- 创建一个Article的增删改查
掌握数据的增删改查之后,就可以做一些小demo,巩固一下基础,让语法更加熟练,所以下面是按照Go web编程里面的文章管理操作,写的一个代码: package main import ( " ...
- 自定义mvc增删改查
对t_mvc_book表的增删改查 导入jar包 BaseDao package com.hmc.util; import java.lang.reflect.Field; import java.s ...
- 【良心保姆级教程】java手把手教你用swing写一个学生的增删改查模块
很多刚入门的同学,不清楚如何用java.swing去开发出一个系统? 不清楚如何使用java代码去操作数据库进行增删改查一些列操作,不清楚java代码和数据库(mysql.sqlserver)之间怎么 ...
- 一个Servlet处理增删改查的方法
处理的思路是在servlet中定义不同的增删改查方法,页面请求 的时候携带请求的参数,根据参数判断调用不同的方法. package cn.xm.small.Servlet; import java.i ...
- springboot+thymeleaf+springbootJPA实现一个简单的增删改查
1.springboot是什么,给我们带来了什么方便? 通过阅读springboot的书籍发现springboot最便利的是为我们自动配置了很多的东西,几乎可以实现无xml,甚至简单的无sql,为我们 ...
- 使用Java实现对一个数组的增删改查以及初始化
import java.util.*; import java.lang.*; public class Array { private int[] data;// 数组 private int si ...
- 使用ExtJS做一个用户的增删改查
extjs版本为4.2,用户数据放在静态list中存储 User.java package com.ext.demo.dao; public class User { private int id; ...
随机推荐
- 10.4-uC/OS-III内部任务(空闲任务OS_IdleTask())
1.内部任务-空闲任务 在uC/OS-III初始化的时候,它会创建至少2个内部的任务(OS_IdleTask()和OS_TickTask()), 3个可选择的任务 ( OS_StatTask(),OS ...
- 【JMeter】【性能测试】分布式远程服务器
jmeter分布式简单步骤说明: 1:添加远程服务器IP到配置文件 在JMETER_HOME / bin / jmeter.properties中,找到名为“ remote_hosts ” 的属性,并 ...
- gitlab:开发+测试+发布的全流程图
- Python字符串切片
1.字符串切片:从字符串中取出相应的元素,重新组成一个新的字符串 语法: 字符串[ 开始元素下标 : 结束元素下标 : 步长 ] # 字符串的每个元素都有正负两种下标 步长: ...
- LVS基础知识
LVS介绍(Linux Virtual Server) 负载调度器,已经集成到内核 工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS iptables/ ...
- 20165236实验一 Java开发环境的熟悉
课程:Java 姓名:郭金涛 学号:20165236 实验日期:2018/04/01 指导老师:娄嘉鹏 实验名称:Java开发环境的熟悉 实验要求: 1. 建立“自 ...
- 发现Boost官方文档的一处错误(numpy的ndarray)
文档位置:https://www.boost.org/doc/libs/1_65_1/libs/python/doc/html/numpy/tutorial/ndarray.html shape在这里 ...
- ssm框架整合
1.1 整合的思路 1.1.1 Dao层 使用mybatis框架.创建SqlMapConfig.xml.(可以是任意名字) 创建一个applicationContext-dao.xml (通过sp ...
- DS1-3
#include <stdio.h> #include <string.h> #define MAXSIZE 1024 double polynomial[MAXSIZE]; ...
- 30-Python3 正则表达式
30-Python3 正则表达式 ''' re.match函数 ''' import re print(re.match('www','www.runoob.com').span()) print(r ...