admin 的流程 Xadmin
提交根评论
显示根评论
--- render显示
--- ajax显示 提交子评论 显示子评论
---- render显示
---- Ajax显示(扩展) 评论树 博客:富文本编辑器
beautfulSoup模块 ret=Book.objects.all().exist() # sql; limit if ret:
print("OK") Book.objects.all().distinct() # XXXX
select distinct(age) from Book
Book.objects.all().values("title").distinct()
sql: 单表处理:
Book id title price publish email addr
python 苹果出版社 @qq.com 北京
go 橘子出版社 @qq.com 南京
java 橘子出版社 @qq.com 南京
linux 橘子出版社 @qq.com 南京 ###################一对多######################多表: Book id title price publish_id
python
go
java
linux Publish id name email addr
苹果出版社 @qq.com 北京
橘子出版社 @qq.com 南京 结论: 一旦确定表关系是一对多,那么关联字段建在多的表中 book: Foreignkey publish_id refference Publish(id) #######################多对多################################# Book id title price publish_id
python
go
java
linux Author id name age
alex
liwen Author_Book id author_id book_id 结论;一旦是多对多的关系:需要建立第三张关系表 #######################一对一################################# Author id name age
alex
liwen AuthorDetail id tel gf author_id(unique)
钢蛋
铁锤 SELECT
"app01_book"."title" FROM "app01_publish"
LEFT OUTER JOIN "app01_book" ON ("app01_publish"."nid" = "app01_book"."publish_id")
WHERE "app01_publish"."name" = 苹果出版社 SELECT
"app01_book"."title" FROM "app01_book" INNER JOIN
"app01_publish" ON ("app01_book"."publish_id" = "app01_publish"."nid")
WHERE "app01_publish"."name" = 苹果出版社 SELECT "app01_book"."title", "app01_publish"."name"
FROM "app01_book" INNER JOIN
"app01_book_authors" ON ("app01_book"."nid" = "app01_book_authors"."book_id")
INNER JOIN "app01_author" ON ("app01_book_authors"."author_id" = "app01_author"."nid") INNER JOIN "app01_authordetail" ON ("app01_author"."authorDetail_id" = "app01_authordetail"."nid")
INNER JOIN "app01_publish" ON ("app01_book"."publish_id" = "app01_publish"."nid") WHERE "app01_authordetail"."telephone" LIKE % ESCAPE '\'
sql: 单表处理:
Book id title price publish email addr
python 苹果出版社 @qq.com 北京
go 橘子出版社 @qq.com 南京
java 橘子出版社 @qq.com 南京
linux 橘子出版社 @qq.com 南京 ###################一对多######################多表: Book id title price publish_id
python
go
java
linux Publish id name email addr
苹果出版社 @qq.com 北京
橘子出版社 @qq.com 南京 结论: 一旦确定表关系是一对多,那么关联字段建在多的表中 book: Foreignkey publish_id refference Publish(id) #######################多对多################################# Book id title price publish_id
python
go
java
linux 聚合与分组 # 统计不止一个作者的图书名称: select book.title,Count(author.name) as c from book inner join book-authors on ...
inner join author on ... group by book.id having c> admin配置参数 后台数据库管理页面 admin model: 对每一个app下的model设计出增伤改查4个url 查看book:
http://127.0.0.1:8000/admin/app01/book/
添加book:
http://127.0.0.1:8000/admin/app01/book/add/
编辑book:
http://127.0.0.1:8000/admin/app01/book/1/change/
删除book:
http://127.0.0.1:8000/admin/app01/book/1/delete/ 注册:
from django.contrib import admin # Register your models here. from .models import * from django.utils.safestring import mark_safe class BookConfig(admin.ModelAdmin): def deletes(self):
return mark_safe("<a href=''>删除</a>") list_display = ["title","price","publishDate",'publish',deletes]
list_display_links = ["price"]
list_filter=["price","title","authors","publish"]
list_editable=["title",] search_fields=["title","price"] def patch_init(self,request,queryset): queryset.update(price=) patch_init.short_description = "批量初始化" actions = [patch_init,] change_list_template="list.html"
fields = ('title',) admin.site.register(Book,BookConfig) admin.site.register(Publish)
admin.site.register(Author)
admin.site.register(AuthorDetail) Admin的实现流程:
启动:
import admin
def autodiscover():
autodiscover_modules('admin', register_to=site) 执行每一个app下的admin.py文件
注册 单例模式 设计URL Xadmin组件 ModelForm组件 CRM Xadmin组件
权限
crm '''
select Max(book.price) as max_price from author inner join book_authors on ...
inner join join book on ... group by author.name ''' Author id name age
alex
liwen Author_Book id author_id book_id 结论;一旦是多对多的关系:需要建立第三张关系表 #######################一对一################################# Author id name age
alex
liwen AuthorDetail id tel gf author_id(unique)
钢蛋
铁锤 SELECT
"app01_book"."title" FROM "app01_publish"
LEFT OUTER JOIN "app01_book" ON ("app01_publish"."nid" = "app01_book"."publish_id")
WHERE "app01_publish"."name" = 苹果出版社 SELECT
"app01_book"."title" FROM "app01_book" INNER JOIN
"app01_publish" ON ("app01_book"."publish_id" = "app01_publish"."nid")
WHERE "app01_publish"."name" = 苹果出版社 SELECT "app01_book"."title", "app01_publish"."name"
FROM "app01_book" INNER JOIN
"app01_book_authors" ON ("app01_book"."nid" = "app01_book_authors"."book_id")
INNER JOIN "app01_author" ON ("app01_book_authors"."author_id" = "app01_author"."nid") INNER JOIN "app01_authordetail" ON ("app01_author"."authorDetail_id" = "app01_authordetail"."nid")
INNER JOIN "app01_publish" ON ("app01_book"."publish_id" = "app01_publish"."nid") WHERE "app01_authordetail"."telephone" LIKE % ESCAPE '\'
ORM分组查询 admin 参数配置 admin流程
() 启动
autodiscover_modules('admin', register_to=site) () 注册
单例模式
admin.site=AdminSite(): 单例对象 class AdminSite(object):
def __init__(self, name='admin'):
self._registry = {} def register(self, model, admin_class=None, **options):
if not admin_class:
admin_class = ModelAdmin self._registry[model] = admin_class(model, self) # {Book:ModelAdmin(Book)} admin.site.register(Book) # admin.site._registry={Book:ModelAdmin(Book)}
admin.site.register(Publish) # admin.site._registry={Book:ModelAdmin(Book),Publish:ModelAdmin(Publish)} class Authoconfig(admin.ModelAdmin):
pass admin.site.register(Author,Authoconfig) # admin.site._registry={Book:ModelAdmin(Book),Publish:ModelAdmin(Publish),Author:Authoconfig(Author)} () 设计URL 为每一个app下的model设计增删改查4个url,以book为例:
127.0.:/admin/app01/book/
127.0.:/admin/app01/book/add
127.0.:/admin/app01/book//change/
127.0.:/admin/app01/book//delete/ url.py:
[
url(r'^index/', index), # index(reqeust)
] {
<class 'django.contrib.auth.models.Group'>: <django.contrib.auth.admin.GroupAdmin object at 0x000000000B5CA5F8>, <class 'django.contrib.auth.models.User'>: <django.contrib.auth.admin.UserAdmin object at 0x000000000B5F9080>,
<class 'app01.models.Book'>: <app01.admin.BookConfig object at 0x000000000B601D68> } {
<class 'django.contrib.auth.models.Group'>: <django.contrib.auth.admin.GroupAdmin object at 0x000000000B5CA5F8>,
<class 'django.contrib.auth.models.User'>: <django.contrib.auth.admin.UserAdmin object at 0x000000000B5F9080>, <class 'app01.models.Book'>: <app01.admin.BookConfig object at 0x000000000B601D68>,
<class 'app01.models.Publish'>: <django.contrib.admin.options.ModelAdmin object at 0x000000000B601D30>,
<class 'app01.models.Author'>: <django.contrib.admin.options.ModelAdmin object at 0x000000000B601DD8>,
<class 'app01.models.AuthorDetail'>: <django.contrib.admin.options.ModelAdmin object at 0x000000000B601E10>
} HTTP: 什么是url:
协议://IP:8000/路径?a=1&b=2 http://127.0.0.1:8000/index/car/3?a=1 url("^yuan/",([
url(r'^test01/', ([
url(r'^test04/', test04),
url(r'^test05/', test05),
],None,None)), url(r'^test02/', test02),
url(r'^test03/', test03),
],None,None)) 需求:
为每一个app下的model设计增删改查4个url 127.0.:/Xadmin/app01/book/
127.0.:/Xadmin/app01/book/add
127.0.:/Xadmin/app01/book//change/
127.0.:/Xadmin/app01/book//delete/
原生form forms组件 ChoiceField(Field) ModelChoiceField(ChoiceField) ModelMultipleChoiceField(ModelChoiceField) 针对form表单设计form组件 modelform class Book(models.Model): title=models.CharField(max_length=)
price=models.DecimalField(max_digits=,decimal_places=) # 999999.99
date=models.DateField()
publish=models.ForeignKey("Publish")
authors=models.ManyToManyField("Author") class BookForm(forms.Form):
title = forms.CharField(max_length=,label="书籍名称")
price = forms.DecimalField(max_digits=, decimal_places=,label="价格") # 999999.99
date = forms.DateField(label="日期",
widget=widgets.TextInput(attrs={"type":"date"})
) #gender=forms.ChoiceField(choices=((,"男"),(,"女"),(,"其他")))
#publish=forms.ChoiceField(choices=Publish.objects.all().values_list("pk","title"))
publish=forms.ModelChoiceField(queryset=Publish.objects.all())
authors=forms.ModelMultipleChoiceField(queryset=Author.objects.all())
admin 的流程 Xadmin的更多相关文章
- 实现django admin后台到xadmin后台的转变
虽然不做前端,还是喜欢好看的东西~.~ 之前同事估计也是功能实现没空管这个后台,前段时间闲的,稍微改了下外貌,前后对比下: Python3.5+Django1.9.7+Xadmin0.6.1 步骤如下 ...
- Django admin组件源码流程
admin 组件 Django 自带的用户后台组件 用于用户便携的操作 admin 组件核心 启动 注册 设计url 启动核心代码 每个app 通过 apps.py 扫描 admin.py 文件 并执 ...
- Django Xadmin - 重构django admin
一.Django admin的执行流程 https://www.cnblogs.com/weihengblog/p/9122509.html 我的博客,介绍了django admin执行流程 二.Xa ...
- Django admin源码剖析
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...
- py3.6 + xadmin的自学网站搭建
xadmin安装 由于安装时需要依赖包并且暂时不支持py3等原因,直接pip install的方法很容易就狗带了. 说一下我在网上找到的安装方式,在GitHub上有这个项目的开源代码,并且还有很多个版 ...
- Django+xadmin打造在线教育平台(二)
三.xadmin后台管理 3.1.xadmin的安装 django2.0的安装(源码安装方式): https://github.com/sshwsfc/xadmin/tree/django2 把zip ...
- 【django之admin,单例模式】
一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...
- Django之admin的使用和源码剖析
admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLE ...
- Django 之 admin管理工具
-------------------------------------------------------------------------妄尝恶果,苦果自来. admin组件使用 Django ...
随机推荐
- shell定时任务crontab
cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details ...
- Structs复习 开始 第一个helloworld项目
大体已经学完ssh了 感觉一起做一个项目有点难 计划先用一下独立的Structs 然后再把数据库操作换成hibernate 然后在用Spring 整合 计划用10天左右吧 但今天开始用Struct ...
- 前端Web安全介绍及规避。。。
本文转载自:https://jelon.top/posts/web-security/ 如果侵权,请及时告知. 一.跨站脚本攻击 (xss) 反射型跨站脚本攻击 攻击者会通过社会工程学手段,发送一个 ...
- 100个常用的Linux命令——转载
1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部 2 ...
- mysql-5.5.20预编译安装
1.MYSQL数据库概念 1)MYSQL是一款关系型数据库系统,数据之间有互相联系,互相的关联和调用的. 2)MYSQL数据用于存储:WEB网站用户名和密码等 3)MYSQL存储数据库是通过二维表格形 ...
- js高级-原型链
JavaScript是基于原型的面向对象的语言(相当于一个基类,父类),而不是像Java通过类模板构造实例,通过原型实现属性函数的复用 函数都有 prototype属性 指向函数的原型对象 只有函数根 ...
- HTML css 样式表
CSS样式表 2.1.样式表的基本概念 2.1.1.样式表分类 1.内联样式表 和html联合显示,控制精确,但是可重用性差,冗余多. 例:<p style="font-size:14 ...
- MySQL动态开启general_log
mysql下用以下命令查看general_log的开启状态. show global variables like '%general%'; 调整general_log位置,linux下一般是/tmp ...
- windows下配置pymysql
可以直接pip安装 pip install pyMysql
- common mistake of closure in loops
[common mistake of closure in loops] 下例中item引用的始终是最后一个值. function showHelp(help) { document.getEleme ...