python 函數和方法的區別


一、函數和方法的區別

1、函數要手動傳self,方法不用傳

2、如果是一個函數,用類名去調用,如果是一個額方法,用對象去調用 

舉例說明:

class Foo(object):
    def __init__(self):
        self.name="haiyan"
    def func(self):
        print(self.name)

obj = Foo()
obj.func()
Foo.func(obj)

判斷函數和方法的方式

from types import FunctionType,MethodType
obj = Foo()
print(isinstance(obj.func,FunctionType))  #False
print(isinstance(obj.func,MethodType))   #True   #說明這是一個方法

print(isinstance(Foo.func,FunctionType))  #True   #說明這是一個函數。
print(isinstance(Foo.func,MethodType))  #False

二、js和jquery綁定事件的幾種方式

 

 三、創建表的一個limit_choices_to參數

limit_choices_to:屏蔽某些選項,只顯示某些指定的選項。例如下面的,只讓顯示部門id是1001的

    consultant = models.ForeignKey(verbose_name="課程顧問", to='UserInfo', related_name='consultant',limit_choices_to={'depart_id':1001})

 四、include和inclusion_tag的區別

這兩個都是處理代碼冗余的,由於其他的頁面也會有這樣的功能,也要用到,我們可以吧它摘出來,在創建個文件夾寫進去。導入進來

如果用include,這里面的數據得從后端傳,
如果用inclusion_tag,你返回啥就會幫我們傳啥,它既有自己的功能,也有include的功能,又可以處理數據

include的使用

<body>
<h3>添加頁面</h3>
{% include "stark/form.html" %}
{#<form action="">#}
{#    {{ form }}#}
{#</form>#}

#include導入的相當於下面注釋的form表單的內容

inclusion_tag的使用

1、創建一個templatetags的文件夾,在里面創建一個change_form.py的文件,在里面寫代碼,需要加上

@register.inclusion_tag這個裝飾器
#!usr/bin/env python
# -*- coding:utf-8 -*-
from django.template import Library
from django.urls import reverse
from app01.service.v1 import site

register = Library()
@register.inclusion_tag("stark/form.html")
def form(model_form_obj):
    from django.forms import ModelChoiceField
    from django.forms.boundfield import BoundField  # 數據都封裝在這個類了
    new_form = []
    for bfield in model_form_obj:
        dic = {"is_popup": False, "item": bfield}  # 每一個bfield就是Form的字段,是一個對象
        if isinstance(bfield.field, ModelChoiceField):
            # print(bfield.field,"popup按鈕")
            print(bfield, type(bfield))  # <class 'django.forms.boundfield.BoundField'>
            releated_model_name = bfield.field.queryset.model  # 找到關聯的類名
            app_model_name = releated_model_name._meta.app_label, releated_model_name._meta.model_name  # 找到應用名和類名(目的是拼接url)
            base_url = reverse("stark:%s_%s_add" % (app_model_name))
            popup_url = "%s?_popupbackid=%s" % (base_url, bfield.auto_id)  #每一個input框的id
            print(bfield.auto_id,"111111")
            dic["is_popup"] = True
            dic["popup_url"] = popup_url
        new_form.append(dic)
    return {"form":new_form}   #返回的這個form是給了"stark/form.html"它里面的form,然后循環遍歷

3、使用

{% load change_form %}
    <body>
<h3>編輯頁面</h3>
{% form form %}
</body>

 4、form.html

<form method="post" class="form-horizontal" novalidate>
    {% csrf_token %}
    {% for dic in form %}
        <div class="col-sm-6">
            <div class="form-group">
                <label for="inputEmail3" class="col-sm-2 control-label">{{ dic.item.label }}</label>
                <div class="col-sm-10" style="position: relative">
                    {{ dic.item }}
                    {% if dic.is_popup %}
                        <div style="position: absolute;right: -5px;top: 8px;z-index: 9999">
                            <a onclick="popUp('{{ dic.popup_url }}')" class="glyphicon glyphicon-plus"></a>
                            <!--注意要加引號,不然就會被當成變量了-->

                        </div>
                        {#判斷如果是MOdelChoicesField是Fk#}
                        {#判斷如果是MOdelChoicesField是Fk#}
                    {% endif %}
                    {{ dic.item.errors.0 }}
                </div>
            </div>
        </div>
    {% endfor %}
    <div class="col-sm-offset-11 col-sm-1">
        <input type="submit" class="btn btn-primary" value="提交">
    </div>
</form>
<script>
    function popupCallback(data) {
        var op = document.createElement("option");
        op.value = data.id;
        op.text = data.text;
        op.setAttribute("selected", "selected");
        document.getElementById(data.popupbackid).appendChild(op)
    }

    function popUp(url) {
        var popupPage = window.open(url, url, "status=1, height:500, width:600, toolbar=0, resizeable=0");
    }

</script>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM