python EasyUI + Django--整合 CSRF 防护去除
先来张完整图:

关于Django 得CSRF 中间件 防护 GET 是不做CSRF验证得 但POST 默认验证 $.cookie('csrftoken')) "value"
第一种方法: 在主配置文件 settings.py 中去除中间件

第二种: 无需 注销 第一种方法 #'django.middleware.csrf.CsrfViewMiddleware',
在Views.py 中引入 from django.views.decorators.csrf import csrf_exempt ,csrf_protect
在需要得方法前添加 @csrf_exempt 不启用CSRF 反之 @csrf_protect
第三种: 通过CSRF 验证 FORM 表单 加入{% csrf_token %}
ajax通过CSRF验证:
$.ajax({
url: '/remove/',
type: 'POST',
data: {id:row.id},
headers: {'X-CSRFtoken': $.cookie('csrftoken')},
定义全局ajax headers请求头 CSRF验证
$(function (){
$.ajaxSettings({
beforeSend: function(xhr,settings){
xhr.setRequestHeader('X-CSRFtoken', $.cookie('csrftoken'))
}
})
});
models 表结构代码
from django.db import models
#根据类对象生成表结构
#python manage.py makemigrations
#根据表结构生成对应数据库表 SQLite
#python manage.py migrate
class Person(models.Model):
Uesr_name = models.CharField(max_length=32)
User_sex = models.CharField(max_length=32, null=True,blank=True)
User_phone=models.IntegerField(max_length=255, null=True,blank=True)
User_addre=models.CharField(max_length=32, null=True,blank=True)
urls.py URL代码
from django.conf.urls import url
from django.contrib import admin
from App.views import *
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$',indexl),
url(r'^start/', app_start),
url(r'^read/', Read_all_SQL),
url(r'^edit/(?P<id>\d+)', Edit_UserNmae),
url(r'^remove/', Remove_US_ID),
]
app.views Views 代码
# -*- coding: utf-8 -*-
from django.views.decorators.csrf import csrf_exempt ,csrf_protect
from django.shortcuts import render ,HttpResponse ,HttpResponseRedirect
import models ,json
import sys
reload(sys)
# Create your views here.
#indexl &
def indexl(request):
return HttpResponseRedirect("http://127.0.0.1:8000/start/") #Read all SQLite Data
@csrf_exempt
def Read_all_SQL(request):
obj_all=models.Person.objects.all()
eaList=[]
for li in obj_all:
eaList.append({"firstname" : li.Uesr_name , "lastname" : li.User_sex , "phone": li.User_phone , "email" : li.User_addre,"id" : li.id})
eaList_len=json.dumps(len(eaList))
json_data_list = {'rows':eaList,'total':eaList_len}
easyList=json.dumps(json_data_list)
return HttpResponse(easyList) #Edit_UserName
@csrf_exempt
def Edit_UserNmae(request,id):
print(id)
print(request.method)
if request.method == 'POST':
Uesr_name=request.POST.get('firstname')
User_sex=request.POST.get('lastname')
User_phone=request.POST.get('phone')
User_addre=request.POST.get('email')
dic={'Uesr_name': Uesr_name ,'User_sex' : User_sex ,
'User_phone' : User_phone , 'User_addre' : User_addre};
models.Person.objects.filter(id=id)\
.update(**dic)
return HttpResponse("Edit_OK") #add User_Name + start_app
def app_start(request):
# add_save_user
if request.method=="POST":
print("POST")
print(request.POST)
Uesr_name=request.POST.get('firstname')
User_sex=request.POST.get('lastname')
User_phone=request.POST.get('phone')
User_addre=request.POST.get('email')
dic={'Uesr_name': Uesr_name ,'User_sex' : User_sex ,
'User_phone' : User_phone , 'User_addre' : User_addre};
models.Person.objects.create(**dic)
return HttpResponse("save")
else:
print(" is null_!")
return render(request,'app/index_bak.html') #Remove SQL_ID
@csrf_exempt
def Remove_US_ID(request):
if request.method=="POST":
print("REMOVE POST")
print(request.POST.get('id'))
us_id=request.POST.get('id')
models.Person.objects.filter(id=us_id).delete()
return HttpResponse("REMOVE")
templates.app.index.html 代码 html 代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EasyUI框架</title>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="/static/jquery/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="/static/jquery/themes/icon.css">
<link rel="stylesheet" type="text/css" href="/static/jquery/themes/color.css">
<link rel="stylesheet" type="text/css" href="/static/jquery/demo/demo.css">
<script type="text/javascript" src="/static/jquery/jquery.min.js"></script>
<script type="text/javascript" src="/static/jquery/jquery.easyui.min.js"></script>
</head>
<body>
<h2>前端_EasyUI框架—后端_Django--整合</h2>
<p>QQ_237356573 (增 删 改 查)</p> <table id="dg" title="My Users" class="easyui-datagrid" style="width:700px;height:250px"
url="/read/"
toolbar="#toolbar" pagination="true"
rownumbers="true" fitColumns="true" singleSelect="true">
<thead>
<tr>
<th field="firstname" width="50">Name</th>
<th field="lastname" width="50">SEX</th>
<th field="phone" width="50">Phone</th>
<th field="email" width="50">OWE</th>
</tr>
</thead>
</table>
<div id="toolbar">
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newUser()">New User</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editUser()">Edit User</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyUser()">Remove User</a>
</div> <div id="dlg" class="easyui-dialog" style="width:400px"
closed="true" buttons="#dlg-buttons">
<form id="fm" method="post" novalidate style="margin:0;padding:20px 50px">
<div style="margin-bottom:20px;font-size:14px;border-bottom:1px solid #ccc">add User_name</div>
<div style="margin-bottom:10px">
<input name="firstname" class="easyui-textbox" required="true" label="Name:" style="width:100%">
</div>
<div style="margin-bottom:10px">
<input name="lastname" class="easyui-textbox" required="true" label="sex:" style="width:100%">
</div>
<div style="margin-bottom:10px">
<input name="phone" class="easyui-textbox" required="true" label="Phone:" style="width:100%">
</div>
<div style="margin-bottom:10px">
<input name="email" class="easyui-textbox" required="true" label="OWE:" style="width:100%">
</div>
</form>
</div>
<div id="dlg-buttons">
<a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok" onclick="saveUser()" style="width:90px">Save</a>
<a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')" style="width:90px">Cancel</a>
</div>
<script type="text/javascript">
//设置ajax全局Header 请求头$.cookie('csrftoken')
$(function (){
$.ajaxSettings({
beforeSend: function(xhr,settings){
xhr.setRequestHeader('X-CSRFtoken', $.cookie('csrftoken'))
}
})
}); var url;
// 显示 编辑框
function newUser(){
$('#dlg').dialog('open').dialog('center').dialog('创建','New User');
$('#fm').form('clear');
url = '/start/';
} //编辑 USER
function editUser(){
var row = $('#dg').datagrid('getSelected');
if (row){
$('#dlg').dialog('open').dialog('center').dialog('setTitle','Edit User');
$('#fm').form('load',row);
// ajax 编辑USER 并且 通过ajax 保存到后端 SQL
url = '/edit/'+row.id;
}
} // 创建——USER 并 SAVE 保存
function saveUser(){
$('#fm').form('submit',{
url: url,
onSubmit: function(){
return $(this).form('validate');
},
success: function(result){
if (result=="save"){
$('#dlg').dialog('close');
$('#dg').datagrid('reload');
}else
if (result.errorMsg){
$.messager.show({
title: 'Error',
msg: result.errorMsg
});
} else {
$('#dlg').dialog('close'); // close the dialog
$('#dg').datagrid('reload'); // reload the user data
}
}
});
} // 根据ID 删除 user
function destroyUser(){
var row = $('#dg').datagrid('getSelected');
if (row){
$.messager.confirm('Confirm','Are you sure you want to destroy this user?',function(r){
if (r){
$.ajax({
url: '/remove/',
type: 'POST',
data: {id:row.id},
headers: {'X-CSRFtoken': $.cookie('csrftoken')},
success: function(data) {
if (data=="REMOVE"){
$('#dg').datagrid('reload'); // reload the user data
}
},
error: function(data) {
alert("error")
}
});
}
});
}
}
</script>
</body>
</html>
new_user

Edit_user

Remove_user

源码下载地址 :https://pan.baidu.com/s/1c25jBwc
python EasyUI + Django--整合 CSRF 防护去除的更多相关文章
- python学习-- Django Ajax CSRF 认证
使用 jQuery 的 ajax 或者 post 之前 加入这个 js 代码:http://www.ziqiangxuetang.com/media/django/csrf.js /*======== ...
- Python自动化之Django的CSRF
什么CSRF? CSRF, Cross Site Request Forgery, 跨站点伪造请求.举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果 某个用户已经登录到你的网站上了,那么当这个 ...
- python框架之Django(9)-CSRF
准备 现有如下模板和视图: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 【Python】Django CSRF问题
参考资料: Django Ajax CSRF 认证:http://www.ziqiangxuetang.com/django/django-csrf.html Python Post遇到csrftok ...
- 将Python的Django框架与认证系统整合的方法
将Python的Django框架与认证系统整合的方法 这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下 将Django ...
- 【python】-- Django 分页 、cookie、Session、CSRF
Django 分页 .cookie.Session.CSRF 一.分页 分页功能在每个网站都是必要的,下面主要介绍两种分页方式: 1.Django内置分页 from django.shortcuts ...
- django整合原有的mysql数据库
虽然django适合从零开始构建一个项目,但有时候整合原有的数据库也在所难免,下面以django整合我的mysql作说明. mysql数据是我从京东上抓取的数据,数据表名为jd,演示如图 下面将jd整 ...
- Python学习---Django拾遗180328
Django之生命周期 前台发送URL请求到Django的中间件进行内容校验,完成校验后到达路由映射文件url.py,然后调用视图函数views.py里面的函数进行内容处理[ 1.操作数据库进行数据读 ...
- python关于Django搭建简单博客项目 详解二-setting.py
这一篇我们来讲解setting.py,具体内容以注释形式写入到下面的setting.py代码中,篇幅所限已把官方所给英文注释删除. 全部源代码和详解请参看http://github.com/Cheng ...
随机推荐
- 还是应该立个flag
6月份 开通博客的想法很简单,就是决定要学习C++和算法,写博客作为督促自己的一个方式,因为还没有系统的学习,自认为写博客或见解有些力所不及,决定先从自己的一篇随笔开始,因为我知道自己一旦开始,就会坚 ...
- Day3-A-Problem H. Monster Hunter HDU6326
Little Q is fighting against scary monsters in the game ``Monster Hunter''. The battlefield consists ...
- 洛谷 P1094 纪念品分类
刚开始看到这题就确定这题最好先要排序 第一个想法是排好序后先让第一个和从倒数第一个开始相加和如果就 <= w,那么用n除以2或者再加一得出答案,然后发现随便 当w = 110 n = 5序列 ...
- Vue-cli3与springboot项目整合打包
一.需求 使用前后端分离编写了个小程序,前端使用的是vue-cli3创建的项目,后端使用的是springboot创建的项目,部署的时候一起打包部署,本文对一些细节部分进行了说明. 二 ...
- upload-labs-env文件上传漏洞 11-19关
Pass-11 源码:加上了本人的注释=.= $is_upload = false; $msg = null; if(isset($_POST['submit'])){ $ext_arr = arra ...
- PHP开发环境(Apache+mysql+PHPstorm+php)的搭建
一.搭建思路 从浏览器到web服务器(Apache)到PHP环境到mysql数据库 二.环境搭建 1.浏览器(略) 2.Apache的安装与配置 1)官方下载地址:https://httpd.apac ...
- Oracle修改密码
1. 登陆oracle sqlplus '/as sysdba' 2. 修改密码 ALTER USER 用户名IDENTIFIED BY 要修改的密码 ; 3.解锁 alter user 用户名 ac ...
- Spark Deploy 模块
Spark Scheduler 模块的文章中,介绍到 Spark 将底层的资源管理和上层的任务调度分离开来,一般而言,底层的资源管理会使用第三方的平台,如 YARN 和 Mesos.为了方便用户测试和 ...
- javascript 原型链污染
原理①javascript中构造函数就相当于类,并且可以将其实例化 ②javascript的每一个函数都有一个prototype属性,用来指向该构造函数的原型同样的javascript的每一个实例对象 ...
- uniapp 小程序 flex布局 v-for 4栏展示
注:本项目的图片资源来源于后端接口,所以使用的是v-for. 关键词:uniapp 小程序 flex布局 v-for 4栏展示 自适应 <view style="display: fl ...