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. POJ1845 sumdiv 数论

    正解:小学数学数论 解题报告: 传送门! 其实不难但我数学这个方面太菜了所以还是多写点儿博客趴QAQ 然后因为是英文的所以先翻译一下,,,? 大概就是说求AB的所有约数之和,对9901取膜 这个只需要 ...

  2. es中的停用词

    停用词主要是为了提升性能与精度.从早期的信息检索到如今,我们已习惯于磁盘空间和内存被限制为很小一部分,所以 必须使你的索引尽可能小. 每个字节都意味着巨大的性能提升. 词干提取的重要性不仅是因为它让搜 ...

  3. (1.10)SQL优化——mysql 常见SQL优化

    (1.10)常用SQL优化 insert优化.order by 优化 1.insert 优化 2.order by 优化 [2.1]mysql排序方式: (1)索引扫描排序:通过有序索引扫描直接返回有 ...

  4. weixin.com的whois信息变更为腾讯了 是准备替换weixin.qq.com吗?

    微信双拼域名weixin.com的whois信息变更,所有人为腾讯.从weixin.com在10月18日这次的whois变更上,透露出腾讯似乎准备启用这个域名.如果启用,毋庸置疑是要应用在腾讯的巨无霸 ...

  5. windows无法安装到这个磁盘。选中的磁盘采用GPT分区形式 Windows 检测到 EFI 系统分区格式化为 NTFS。将 EFI 系统分区个数化为 FAT32,然后重新启动安装

    win10安装问题解决 问题 1.windows无法安装到这个磁盘.选中的磁盘采用GPT分区形式 解决方法: 1.bios,更改 uefi/legacy boot 为ueei only 后面可以安装了 ...

  6. freespace_evidence

    根据视点计算点云的freespace_evidence 参考资料: Bresenham's line algorithm:https://en.wikipedia.org/wiki/Bresenham ...

  7. Oracle查看用户密码过期,修改永不过期

    01.查看当前open用户 select username,account_status,expiry_date,profile from dba_users; 02.查看目前的密码过期策略 sele ...

  8. 虚拟货币ICO是什么意思 看完秒懂

    有这样一个市场,与90年代的互联网泡沫及其相似,它被许多金融界大咖怒指为丧失道德底线的圈钱工具,更被投资者而疯狂追捧.是的,没错,它就是近二年火遍全球的虚拟货币ICO.那么,对于很多投资小白来说,虚拟 ...

  9. 10.25 AITalkUat部署

    准备: git clone AITalkUat工程,在本地跑: 可以直接浏览器访问127.0.0.1:5000() 如果带上参数,可以得到访问的结果127.0.0.1:5000/autoservice ...

  10. android studio 设置安装不占用C盘

    我们知道,android studio 安装会占用大量的空间,比如我们我们将andriod status 安装到了D:\IDE\Android Studio这里,但是你会发现,在编译出包过程中,C盘的 ...