url方法使用与单例模式
一、url方法使用
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from django.shortcuts import HttpResponse def book(request):
return HttpResponse("book") def test01(request):
return HttpResponse("test01") def test02(request):
return HttpResponse("test02") def test03(request):
return HttpResponse("test03") def test04(request):
return HttpResponse("test04") def test05(request):
return HttpResponse("test05") urlpatterns = [
path('admin/', admin.site.urls),
# 情况1 http://127.0.0.1:8080/book/
url(r'^book/', book),
# 情况2 http://127.0.0.1:8080/yuan/test01/ 或者 http://127.0.0.1:8080/yuan/test03/test04/
url(r'^yuan/', ([url(r"^test01/", test01),
url(r"^test02/", test02),
url(r"^test03/", ([url(r'^test04/', test04),
url(r'^test05/', test05)], None, None)),
], None, None)), # 使用include对“情况2”进行封装,在app下新建urls.py,写入相应url
# http://127.0.0.1:8080/yuan/test01/
url(r'^yuan/', include("app01.urls"))
]
二、单例模式
1、使用__new__方法创建单例模式:
# tests.py # 单例模式: 一个类只允许实例化出一个对象 如配置文件
# 实现单例模式的方法:通过模块;通过__new__;使用装饰器;使用元类 # 1、使用__new__方法
class Singleton(object):
_instance = None def __new__(cls, *args, **kwargs):
if not cls._instance: # 如果不为None
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance class MyClass(Singleton):
a = 1 one = MyClass()
tow = MyClass() print(one == tow)
print(id(one), id(tow)) # 打印两个对象的内存地址
2、使用python模块创建单例模式:
# 使用python模块创建单例模式 # my_singleton.py class MySingleton():
x = 1 def foo(self):
print(self.x) my_singleton = MySingleton() ————————————————————————————————
# func.py from my_singleton import my_singleton def bar():
print("in bar:", id(my_singleton)) ————————————————————————————————
# main.py from my_singleton import my_singleton, MySingleton print(id(my_singleton)) a = MySingleton()
b = MySingleton()
print("a和b的内存地址:", id(a), id(b)) # 打印发现a、b两个实例的内存地址不一样,因为此时的MySingleton只是一个普通类被实例化 from my_singleton import my_singleton print(id(my_singleton)) from func import bar
bar() # 打印发现三次实例化的my_singleton的内存地址是一样的
# 在python中 模块一旦被导入,就不会再导入第二次,之后再执行它,依然是第一次导入的那个文件
3、Django的单例模式(使用模块实现单例)
新建一个Django项目,新建app01(步骤略)
app01.models.py
from django.db import models class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=6, decimal_places=2)
pub_date = models.DateField()
authors = models.ManyToManyField(to="Author") def __str__(self):
return self.title class Author(models.Model):
name = models.CharField(max_length=32) def __str__(self):
return self.name
做数据库迁移(略)
app01.admin.py
from django.contrib import admin
from app01.models import * # Register your models here. class BookConfig(admin.ModelAdmin):
"""自定制类 使得在admin数据库管理页面可以看到自己想要看的信息"""
list_display = ["title", "price", "pub_date"] # 多对多字段不可以用于此处
list_display_links = ["title"] # 设置可链接的字段 设置后,点击该字段便可以进入编辑页面
list_filter = ["pub_date"] # 以所设置的字段作为筛选器 进行记录查询
list_editable = ["price"] # 设置可编辑字段,注意:如果在list_display_links中设置了的字段,在此处不可以再设置
search_fields = ["title", "price"] # 设置检索字段(模糊查询:输入关键字即可查询)
date_hierarchy = "pub_date" # 过滤日期 # action:批量操作记录
def func(self, request, queryset): # request:请求 queryset:所选中的那些你想要操作的数据
print(self, request, queryset)
# 对选中记录作操作:
queryset.update(pub_date="2012-1-1") # 将所选记录的出版日改为2012年1月1日
func.short_description = "出版日改为2012年1月1日"
actions = [func,] fields = ["title", "price", "pub_date", "authors"] # 在添加记录的页面显示的字段
# exclude = ["pub_date"] # 在添加记录的页面不显示的字段,与fields相反 ordering = ["id"] # 按id升序排列 降序用["-id"] admin.site.register(Book, BookConfig) # 源码:register(self, model_or_iterable, admin_class=None, **options)
# model_or_iterable=Book, admin_class=BookConfig print(admin.site._registry)
"""
{<class 'django.contrib.auth.models.Group'>: <django.contrib.auth.admin.GroupAdmin object at 0x0000000003C1C2B0>,
<class 'django.contrib.auth.models.User'>: <django.contrib.auth.admin.UserAdmin object at 0x0000000003C4E128>,
<class 'app01.models.Book'>: <app01.admin.BookConfig object at 0x0000000003C58F98>} 有3张表存在
""" admin.site.register(Author)
再新建app02,在settings.py中配置好app02:

app02.models.py
from django.db import models class Book2(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=6, decimal_places=2)
pub_date = models.DateField() def __str__(self):
return self.title
数据库迁移(略)
app02.admin.py
from django.contrib import admin
from app02.models import * admin.site.register(Book2) print(admin.site._registry)
"""
{<class 'django.contrib.auth.models.Group'>: <django.contrib.auth.admin.GroupAdmin object at 0x0000000003C1FA58>,
<class 'django.contrib.auth.models.User'>: <django.contrib.auth.admin.UserAdmin object at 0x0000000003C4B8D0>,
<class 'app01.models.Book'>: <app01.admin.BookConfig object at 0x0000000003C5D7B8>, <class 'app01.models.Author'>: <django.contrib.admin.options.ModelAdmin object at 0x0000000003C5D780>,
<class 'app02.models.Book2'>: <django.contrib.admin.options.ModelAdmin object at 0x0000000003C5D8D0>} 再新建一个app02,创建一个model:Book2后,打印发现有四张表
这就是单例模式,所有app共用一个admin配置
"""
总结:
使用模块创建单例:创建一个模块,里面新建一个类,再实例化这个类,在其他模块中导入这个实例化的对象,即可实现单例模式。
url方法使用与单例模式的更多相关文章
- asp.net 重写URL方法和封装好的DLL
.net 重写URL方法和封装好的DLL URL重写方法DLL(2.0)
- 利用Django中的url方法实现地址动态拼接自动生成超链接地址
目标 建立一个图书列表页面,显示图书名列表,并实现点击书名跳转到图书详细页面,显示图书详细信息. URL方法简介 功能:返回一个绝对路径的引用(不包含域名的URL):该引用匹配一个给定的视图函数和 一 ...
- linux下重新定位SVN URL方法
linux下重新定位SVN URL方法: 如果更换了SVN服务器,就需要重新定位,指向新的SVN URL. 重新定位命令:svn switch --relocate 原svn地址 新svn地址 ...
- linux下又一次定位svn url方法
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/oudahe/article/details/34437661 linux下又一次定位svn url方 ...
- 4、flask之分页插件的使用、添加后保留原url搜索条件、单例模式
本篇导航: flask实现分页 添加后保留原url搜索条件 单例模式 一.flask实现分页 1.django项目中写过的分页组件 from urllib.parse import urlencode ...
- flask之分页插件的使用、添加后保留原url搜索条件、单例模式
本篇导航: flask实现分页 添加后保留原url搜索条件 单例模式 一.flask实现分页 1.django项目中写过的分页组件 from urllib.parse import urlencode ...
- java url方法解释
java 的url类中有很多get方法 以下是获取值的意义 // 首先先看一下wikipedia上关于url的一个描述 //Every HTTP URL conforms to the syntax ...
- PHP获取解析URL方法
们要经常对url里面所带的参数进行解析,如果我们知道了url传递参数名称,例如: /index.php?name=tank&sex=1#top 我们就可以通过$_GET['name'],$_G ...
- nodejs url方法
ulrl方法 url.format(urlObj) //将对象装换成url url.parse(urlStr[, parseQueryString][, slashesDenoteHost]) / ...
随机推荐
- 第四章之S5PV210内存初始化
1,既然UART可以打印出信息来,那我们可以打印内存中的值.在506行添加如下代码: /***UART transmit function by xu ***/ display_addr_dat: l ...
- [Usaco2017 Open]Modern Art 2
Description Having become bored with standard 2-dimensional artwork (and also frustrated at others c ...
- String Mark Codeforces - 895D
一看好像会做的样子,就去做了一下,结果 猝不及防地T掉了 赶紧查了一下,没有死循环,复杂度也是对的,无果,于是翻了题解 题解没看懂,但是找到了标程,然后发现我被卡常了... 而且好像当时还过了前10个 ...
- UML 用例图(转载)
UML是系统架构设计师考试的一个重要考点,需要考生掌握.但是有些考生,在学习的过程中会有这样的疑问,在敏捷开发时代,UML还有没有必要去学习? UML还是有用的,主要用在设计和分析阶段,但是UML不适 ...
- poj3040 Allowance
思路: 贪心. 看了题解说是 先把面值从大到小排序然后从头往尾扫,只要不超额,能取多少去多少然后如果还有剩余,就从尾往头扫,尽量取,让他恰好超额 不过并不懂证明. 实现: #include <i ...
- P1372 又是毕业季I
题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定 ...
- linux命令规范
Linux文件后缀: 系统文件:*.conf *.rpm 系统与脚本:*.c *.php 存档文件和压缩文件:*.tar *.gz ……… Linux文件命名规则: 1.大小写敏感 2.除 ...
- Jquery+ashx实现Ajax
一 Ajax的实现方式 1.使用一般的webform,在页面用jQuery ajax调用,再从取得的html数据中取得<body>内的内容,写入DOM 优点:不用改变现有的asp.net开 ...
- Farseer.net轻量级开源框架 中级篇:探究ORM(Mapping)
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: SQL执行报告 下一篇:Farseer.net轻量级开源框架 中级篇: Cooki ...
- Vue之x-template(2)
将html结构写在一对script标签中,设置type=“x-template” <!DOCTYPE html> <html> <head lang="en&q ...