一、首先说一下自执行函数
1. 立即执行函数是什么?也就是匿名函数
立即执行函数就是
- 声明一个匿名函数
- 马上调用这个匿名函数
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, 600, toolbar=0, resizeable=0"); {# window.open( url, "n1","status=1, height:500, 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): passclass Bar(Foo):
passobj = Bar()
# isinstance用于判断,对象是否是指定类的实例 (错误的)isinstance用于判断,对象是否是指定类或其派生类的实例
isinstance不精准
print(isinstance(obj,Foo),id(obj)) #True 35558624
print(isinstance(obj,Bar),id(obj)) #True 35558624print(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": "u6d77u71d5", "age": 22}<class 'str'> print(json.dumps(v,ensure_ascii=False)) #{"name": "海燕", "age": 22}
6、反射举例
from 反射.settings import DB_PATHdef func():
# 导入文件
# 反射
# DB_PATH = "db.mysql.MySQLHelper"
module_path,cls_name = DB_PATH.rsplit('.',maxsplit=1)</span><span style="color: #008000;">#</span><span style="color: #008000;"> 以字符串的形式导入模块</span> <span style="color: #008000;">#</span><span style="color: #008000;"> from db import mysql</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> importlib module_obj </span>=<span style="color: #000000;"> importlib.import_module(module_path) </span><span style="color: #008000;">#</span><span style="color: #008000;"> 去模块中导入类</span> cls =<span style="color: #000000;"> getattr(module_obj,cls_name) </span><span style="color: #008000;">#</span><span style="color: #008000;"> 类实例化</span> obj =<span style="color: #000000;"> cls() obj.fetchone()
if name == 'main':
func()
复制代码
6、知识点大致整理
- 单例模式 - 文件导入 - 类方法 - 反射 - 导入一个模块importlib,利用反射找到类 - getattr</span>-<span style="color: #000000;"> 面向对象 </span>-<span style="color: #000000;"> 遇到封装数据时、;字典 自己写一个类,封装对象来做 </span>- 遇到循环数据时:字典,元组,列表,可迭代对象(<span style="color: #800080;">__iter__</span><span style="color: #000000;">) </span>-<span style="color: #000000;"> 遇到后台对数据加工在页面中循环展示,可以通过yield来做(边循环边生产)。也可以先处理再循环 </span>-<span style="color: #000000;"> request.GET </span>- ?name=alex&age=18&age=19 <span style="color: #008000;">#</span><span style="color: #008000;">如果遇到这样的。</span> - QueryDict类型 = {<span style="color: #800000;">"</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span>:[<span style="color: #800000;">"</span><span style="color: #800000;">alex</span><span style="color: #800000;">"</span>,],<span style="color: #800000;">"</span><span style="color: #800000;">age</span><span style="color: #800000;">"</span>:[18,19<span style="color: #000000;">]} </span>- 要想被修改 .mutable =<span style="color: #000000;"> True params[</span><span style="color: #800000;">"</span><span style="color: #800000;">hobby</span><span style="color: #800000;">"</span>] = <span style="color: #800000;">"</span><span style="color: #800000;">鲁宁</span><span style="color: #800000;">"</span><span style="color: #000000;"> QueryDict类型 </span>= {<span style="color: #800000;">"</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span>:[<span style="color: #800000;">"</span><span style="color: #800000;">alex</span><span style="color: #800000;">"</span>,],<span style="color: #800000;">"</span><span style="color: #800000;">age</span><span style="color: #800000;">"</span>:[18,19],hobby:[<span style="color: #800000;">"</span><span style="color: #800000;">鲁宁</span><span style="color: #800000;">"</span><span style="color: #000000;">],} params[</span><span style="color: #800000;">"</span><span style="color: #800000;">hobby</span><span style="color: #800000;">"</span>] = [<span style="color: #800000;">"</span><span style="color: #800000;">鲁宁</span><span style="color: #800000;">"</span>] <span style="color: #008000;">#</span><span style="color: #008000;">传进去的是一个列表套列表</span> QueryDict类型 = {<span style="color: #800000;">"</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span>:[<span style="color: #800000;">"</span><span style="color: #800000;">alex</span><span style="color: #800000;">"</span>,],<span style="color: #800000;">"</span><span style="color: #800000;">age</span><span style="color: #800000;">"</span>:[18,19],hobby:[[<span style="color: #800000;">"</span><span style="color: #800000;">鲁宁</span><span style="color: #800000;">"</span><span style="color: #000000;">]],} </span>- params.setlist(<span style="color: #800000;">"</span><span style="color: #800000;">hobby</span><span style="color: #800000;">"</span>,[<span style="color: #800000;">"</span><span style="color: #800000;">鲁宁</span><span style="color: #800000;">"</span>]) <span style="color: #008000;">#</span><span style="color: #008000;">直接把本身的元素传进去</span> QueryDict类型 = {<span style="color: #800000;">"</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span>:[<span style="color: #800000;">"</span><span style="color: #800000;">alex</span><span style="color: #800000;">"</span>,],<span style="color: #800000;">"</span><span style="color: #800000;">age</span><span style="color: #800000;">"</span>:[18,19],hobby:[<span style="color: #800000;">"</span><span style="color: #800000;">鲁宁</span><span style="color: #800000;">"</span><span style="color: #000000;">],} </span>-<span style="color: #000000;"> 类 </span>-<span style="color: #000000;"> 组件 </span>-<span style="color: #000000;"> StarkSite,单利模式,用于保存Model类和处理这个类增删改查的配置类的对象 </span>-<span style="color: #000000;"> StarkConfig:处理增删改查的基类 </span>-<span style="color: #000000;"> ChangeList:将列表页面的功能封装到此类中 </span>- FilterRow:创建的可迭代对象(<span style="color: #800080;">__iter__</span><span style="color: #000000;">),一个对象保存了组合搜索中的一行数据 </span>-<span style="color: #000000;"> FilterOption:封装组合搜索的配置项(数据库字段,是否多选,是否choice,条件) </span>-<span style="color: #000000;"> 使用 </span>- <span style="color: #0000ff;">class</span><span style="color: #000000;"> UserInfo(models.MOdel):.... 在stark.py </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> UserMOdelForm(MOdelForm): </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Meta: model </span>=<span style="color: #000000;"> UserInfo fields </span>= <span style="color: #800000;">"</span><span style="color: #800000;">__all__</span><span style="color: #800000;">"</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> UserinfoConfig(v1.StarkConfig) list_display ..... model_form_class </span>=<span style="color: #000000;"> UserMOdelForm v1.site.register(UserInfo,UserinfoConfig) </span></pre>