一、首先说一下自执行函数

1. 立即执行函数是什么?也就是匿名函数

立即执行函数就是

  1. 声明一个匿名函数
  2. 马上调用这个匿名函数

2、popup的举例

点击,弹出一个新的窗口。保存完事,页面不刷新数据就返回了。(点击admin的+,弹出的框就是用popup来做的)

具体操作步骤:

1、urls.py

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^pop/', views.pop),
]

2、views.py

def index(request):
return render(request,"index.html") def pop(request):
if request.method=="GET":
return render(request,"pop.html")
else:
user = request.POST.get("user")
print(user)
return render(request,"pop_response.html",{"user":user})

3、templaates

index.html

<body>
<h1 id = "a">无所谓</h1>
<a href="#" onclick=popUp("http://www.baidu.com")>点我点我</a>
<script>
function xxxpopupCallback(text) {
document.getElementById('a').innerHTML = text; //找到标签吧值替换成用户传进来的值
}
function popUp(url) {
window.open( '/pop/', "n1","status=1, height:500, width:600, toolbar=0, resizeable=0");
{# window.open( url, "n1","status=1, height:500, width:600, toolbar=0, resizeable=0");#}
}

分析:
  index页面的第一个参数就是url,写什么路径就看到什么页面
  n1:弹出窗口的名字,定死了就弹出一个
  '/pop/','/pop/' 一个url弹出一个
  如果有两个+最多弹出两个框

</script>
</body>

pop.html

<body>
<form action="" method="post">
{% csrf_token %}
<input type="text" name="user">
<input type="submit" value="提交">
</form>
</body>

pop_response.html

<h1>正在关闭</h1>
<script>
(function () {
// 可以调用popup原页面的一个函数,
opener.xxxpopupCallback("{{ user }}"); xxxpopupCallback是自定义的函数
window.close(); //传完数据之后自动关闭
})() </script>

运行结果截图

3、Form时时更新的两种方式

在ModelForm需要知道:

from app03 import models
from django.forms import ModelForm
class UserForm(ModelForm):
class Meta:
model = models.UserInfo
fields = "__all__"
它的内部找到类之后,如果 类里的字段是FK,就会自动生成ModelChoiceField
如果是M2M ,就会自动生成ModelMutilChoiceField

4、isintance和type

class Foo(object):
pass class Bar(Foo):
pass obj = Bar()
# isinstance用于判断,对象是否是指定类的实例 (错误的)
# isinstance用于判断,对象是否是指定类或其派生类的实例
# isinstance不精准
print(isinstance(obj,Foo),id(obj)) #True 35558624
print(isinstance(obj,Bar),id(obj)) #True 35558624 print(type(obj)==Foo) #False
print(type(obj)==Bar) #True # 思考?
# 对象,判断是否是某个类型?
# 如果没有继承关系用isinstance,
# 如果有继承关系可以用type,

5、json的补充

import json
v = {"name":"海燕","age":22}
str_dic = json.dumps(v)
print(json.dumps(v),type(str_dic)) #{"name": "\u6d77\u71d5", "age": 22}<class 'str'>
print(json.dumps(v,ensure_ascii=False)) #{"name": "海燕", "age": 22}

6、反射举例

from 反射.settings import DB_PATH

def func():
# 导入文件
# 反射
# DB_PATH = "db.mysql.MySQLHelper"
module_path,cls_name = DB_PATH.rsplit('.',maxsplit=1) # 以字符串的形式导入模块
# from db import mysql
import importlib
module_obj = importlib.import_module(module_path) # 去模块中导入类
cls = getattr(module_obj,cls_name) # 类实例化
obj = cls()
obj.fetchone() if __name__ == '__main__':
func()
复制代码

6、知识点大致整理

- 单例模式
- 文件导入
- 类方法
- 反射
- 导入一个模块importlib,利用反射找到类
- getattr - 面向对象
- 遇到封装数据时、;字典
自己写一个类,封装对象来做
- 遇到循环数据时:字典,元组,列表,可迭代对象(__iter__)
- 遇到后台对数据加工在页面中循环展示,可以通过yield来做(边循环边生产)。也可以先处理再循环
- request.GET
- ?name=alex&age=18&age=19 #如果遇到这样的。
- QueryDict类型 = {"name":["alex",],"age":[18,19]}
- 要想被修改 .mutable = True
params["hobby"] = "鲁宁"
QueryDict类型 = {"name":["alex",],"age":[18,19],hobby:["鲁宁"],} params["hobby"] = ["鲁宁"] #传进去的是一个列表套列表
QueryDict类型 = {"name":["alex",],"age":[18,19],hobby:[["鲁宁"]],} - params.setlist("hobby",["鲁宁"]) #直接把本身的元素传进去
QueryDict类型 = {"name":["alex",],"age":[18,19],hobby:["鲁宁"],} - 类
- 组件
- StarkSite,单利模式,用于保存Model类和处理这个类增删改查的配置类的对象
- StarkConfig:处理增删改查的基类
- ChangeList:将列表页面的功能封装到此类中
- FilterRow:创建的可迭代对象(__iter__),一个对象保存了组合搜索中的一行数据
- FilterOption:封装组合搜索的配置项(数据库字段,是否多选,是否choice,条件)
- 使用
- class UserInfo(models.MOdel):.... 在stark.py
class UserMOdelForm(MOdelForm):
class Meta:
model = UserInfo
fields = "__all__" class UserinfoConfig(v1.StarkConfig)
list_display
.....
model_form_class = UserMOdelForm
v1.site.register(UserInfo,UserinfoConfig)

popup的简单应用举例(具体在增删改查组件中用到)以及补充的知识点的更多相关文章

  1. 最简单的jsp+servlet的增删改查代码

    package ceet.ac.cn.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...

  2. 四种简单的sql语句(增删改查语句)

    四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...

  3. Redis简单的数据操作(增删改查)

    #Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2 ...

  4. day84-仿照admin实现一个自定义的增删改查组件

    一.admin的使用 app01的admin.py文件: class BookConfig(admin.ModelAdmin): list_display=[] list_display_links= ...

  5. 基于django做增删改查组件,分页器组件

    增删改查组件 一.Djangoadmin的启发 二.基于Djangoadmin实现数据的增删改查 分页器组件 分页器组件的介绍以及源码解读 补充:源码下载,

  6. c#winform简单实现Mysql数据库的增删改查的语句

    通过简单的SQL语句实现对数据库的增删改查. 窗口如下: 定义打开与关闭连接函数,方便每次调用: 增加指令: 删除指令: 修改指令: 查找指令: 表格情况:

  7. 使用jdbc实现简单的mvc模式的增删改查

    Mvc模式设计: 视图:添加界面(addUser.jsp),修改界面(updateUser.jsp),显示页面(allUser.jsp) 控制器:添加信息控制器(AddUserServlet),修改信 ...

  8. 简单实现 nodejs koa2 mysql 增删改查 制作接口

    1.首先 在电脑上安装 nodejs (此处略过) 2.全局安装 koa2 (这里使用的淘宝镜像cnpm,有兴趣的同学可以自行搜索下) cnpm install koa-generator -g 3. ...

  9. Ado.net中简单的DBHelper类(增删改查)

    private static string connString = "server=.;database=hotel;uid=aa;pwd=123";//最好从配置文件中取出 p ...

随机推荐

  1. linux随机生成密码

    1.mkpassword工具 # 使用最多的密码生成工具 yum -y install expect #需要安装expect工具 mkpasswd -l -d -c -C -s #直接在命令行进行随机 ...

  2. mysql 原理 ~ kill session解析

    一 简介:kill session为什么需要很久 二 kill语句分为三类  1 DML语句   2 select语句   3 DDL语句 三  kill都要做什么操作   1 kill对sessio ...

  3. Create Extraction Zone

    添加C++类,名称为FPSExtractionZone 添加盒体组件,进行公开处理,并设置为随处可见 UPROPERTY(VisibleAnywhere,Category="Componen ...

  4. 对象关系映射(ORM)框架GreenDao简介和基本使用

    官网上的介绍,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案. GreenDao特点 性能最大化,可能是Android平台上最快的ORM框架 易于使用的A ...

  5. 打印手机当前界面(位于栈顶)的activity

    adb shell dumpsys activity activities | grep "Hist #0" 一般第一条就是当前页(位于栈顶)的activity

  6. Zookeeper客户端Curator基本API

    在使用zookeper的时候一般不使用原生的API,Curator,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连.反复注册Watcher和NodeExistsExceptio ...

  7. MySQL伪master+Binlog+同步【转】

    MySQL 中drop 等高危误操作后恢复方法 实验目的: 本次实验以恢复drop操作为例,使用不同方法进行误操作的数据恢复. 方法: 利用master同步 :伪master+Binlog+同步(本文 ...

  8. TextArea 保存时换行符处理

    后台数据保存时就要处理“\r\n",替换成”<br />",前台(html)页面显示时再做下处理. 自己是mvc页面,用到了两个方法:Html.Raw(),以及Http ...

  9. 使用Let's Encrypt为网站加入SSL证书

    一直没有为网站配置过HTTPS,因为怕麻烦.不过这次工作要求,没有办法,只能硬着头皮上了. 老板提供了一个关键字,Let's Encrypt.其实最早看到这句话,我以为是一个动词,让我行动的意思.但是 ...

  10. AviSynth AVS Importer Plugin for Adobe Premiere Pro CC 2015 x64

    Premiere CS AVS Importer x64.prm copy to Adobe\Adobe Premiere Pro CC 2015\Plug-Ins\Common\ VSFilterM ...