Django 通过Ajax局部刷新更新Table

在Python Django框架中,通过Ajax方式向后台提交查询请求,返回数据,前台局部刷新Table的方式完成数据条件查询。

Post提交方式与Get方式存在略微的区别,因为Post是修改添加操作,涉及到数据的读写,而Get更多只是读取,明显Post的权限要大的多,所以安全方面限制也要更多,提供CSRFtoken是为了防止跨域攻击,因为现在很容易用第三方工具构造出Post以及Get请求。


** settings.py中添加CsrfViewMiddleware支持**

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',# csrf
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

view.py中对响应的处理函数

def query(request):
    env = request.POST.get('envir_name')
    pro = request.POST.get('project_name')

    cursor = connection.cursor()
    data = []
    data_list = []
    cursor.execute('select * from table_name where Hostname like "' + env + '%"  and Hostname like "%' + pro + '%"')
    for row in cursor.fetchall():
        data_list.append(row)
        dict_row = {}
        dict_row['id'] = row[0]
        dict_row['col_1'] = row[1]
        dict_row['col_2'] = row[2]
        dict_row['col_3'] = row[3]
        dict_row['col_4'] = row[4]
        dict_row['col_5'] = row[5]
        dict_row['col_6'] = row[6]
        dict_row['col_7'] = row[7]
        dict_row['col_8'] = row[8]
        dict_row['col_9'] = row[9]
        dict_row['col_10'] = row[10]
        dict_row['col_11'] = row[11]
        dict_row['col_12'] = row[12]
        dict_row['col_13'] = row[13]
        dict_row['col_14'] = row[14]
        data.append(dict_row)

    response = HttpResponse()
    response['Content-Type'] = "text/javascript"
    response.write(json.dumps({'rows':data, 'total': len(data)}))
    return response

** HTML 构造form表单:**

{% for record in lists %} {% endfor %}
列***** 列***** 列***** 列***** 列***** 列***** 列***** 列***** 列***** 列***** 列***** 列***** 列***** 列*****
{{ record.col_1}} {{ record.col_2}} {{ record.col_3}} {{ record.col_4}} {{ record.col_5}} {{ record.col_6}} {{ record.col_7}} {{ record.col_8}} {{ record.col_9}} {{ record.col_10}} {{ record.col_11}} {{ record.col_12}} {{ record.col_13}} {{ record.col_14}}

** JavaScript 通过ajax发送请求,动态更新table:**



** 浏览器中条件查询结果**

Django 通过Ajax局部刷新更新Table_第1张图片

** 附录**
Q1:表单方式的POST提交HTTP 403问题?
A1:Django的Cross Site Request Forgery protection机制。这个机制是为了保护不受csrf攻击。具体解决办法是:
(1)在settings.py文件中找到 MIDDLEWARE_CLASSES,在其中加入一个中间件:'django.middleware.csrf.CsrfViewMiddleware' ;
(2)如果你是用jQuery来处理ajax的话,发送请求前加上。或者把它放在一个独立的js文件中,在html页面中都引入。注意这个js文件必须在jquery的js文件引入之后,再引入。
这样就可以解决表单方式的POST提交HTTP 403问题了,正常用ajax与Django通信了。

你可能感兴趣的:(Django 通过Ajax局部刷新更新Table)