zoukankan      html  css  js  c++  java
  • popup的简单应用举例(具体在增删改查组件中用到)以及补充的知识点

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

    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, 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):
        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": "u6d77u71d5", "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)

    </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&amp;age=18&amp;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>
    
    复制代码
  • 相关阅读:
    推荐文章:深入浅出REST
    推荐Fowler作序的新书《xUnit Test Patterns》
    测试替身:Test Double
    踢毽也能治胃病,适当的运动带来健康,健康带来快乐
    10分钟入门AOP:用PostSharp普及一下AOP
    推荐一本新的英文版算法书和一本讲debug的书
    emacs开发rails的演示
    转:一个土木工程师在四川地震灾后的思考
    多语言多范型编程PPP
    巧用editplus学习正则表达式
  • 原文地址:https://www.cnblogs.com/maaosheng/p/11621442.html
Copyright © 2011-2022 走看看