(22)Ajax的基本使用(实现登录功能和局部刷新以及防止跨站请求伪造攻击)

时间:2022-09-26 14:15:49

Ajax的作用

前后端分离的项目,需要交互,就要通过Ajax来完成交互

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)

Ajax的特性

1、同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求

2、异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求

3、局部刷新

AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

PS:Ajax是一门前端的语言,和任何语言都可以做前后端交互

Ajax 的简单使用,发送get请求

urls

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
url(r'^ajax/$',views.ajax_test)
]

views.py

from django.shortcuts import render,HttpResponse,redirect

# Create your views here.

def index(request):
return render(request,'index.html') def ajax_test(request):
return HttpResponse('ok')

index.py

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
{#导入css用link#}
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/css/bootstrap.css">
{#导入js用script#}
<script src="/static/jquery-3.3.1.js"></script>
<title>我是index页面</title>
</head>
<body>
<h1>我的index页面</h1>
<p><button id="btn">点我看美女</button></p>
</body> <script>
 //jquery封装了一个方法,直接使用ajax方法,参数是一个字典形式
    $('#btn').click(function () {
//点击按钮后往后台发ajax请求获取数据
$.ajax({
url:'/ajax/', //向一个地址发送请求
type:'get', //这个就是向上面地址发送的请求类型
success:function (data) { //当请求成功获取数据后相应这个函数,匿名函数里一定要有一个参数data,服务器返回的数据都放在data里
alert(data),
console.log(data) //这里是向终端返回数据
}
}) })
</script>
</html>

Ajax 简单使用,发送post请求

urls

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
url(r'^ajax/$',views.ajax_test)
]

views

from django.shortcuts import render,HttpResponse,redirect

# Create your views here.

def index(request):
return render(request,'index.html') def ajax_test(request):
if request.method == 'GET':
return HttpResponse('GET----------OK')
elif request.method == 'POST':
name = request.POST.get('name')
age = request.POST.get('age')
return HttpResponse(name + age)

index

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/css/bootstrap.css">
<script src="/static/jquery-3.3.1.js"></script>
<title>我是index页面</title>
</head>
<body>
<h1>我的index页面</h1>
<p><button id="btn">点我看美女</button></p>
</body> <script>
$('#btn').click(function () {
//点击按钮后往后台发ajax请求获取数据
$.ajax({
url:'/ajax/',
type:'post',
data:{'name':'lqz','age':18}, //post请求需要携带数据,数据就放在变量data里
success:function (data) {
alert(data),
console.log(data)
}
}) })
</script>
</html>

ajax 实现登录功能,前后端数据库数据获取以及局部刷新

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
url(r'^login/$',views.login

views.py

from django.shortcuts import render,HttpResponse,redirect
from app01 import models
from django.http import JsonResponse #这个模块就是向前端返回json格式数据
# Create your views here. def index(request):
return render(request,'index.html') def login(request):
'''从数据库获取数据'''
dic = {'status': 100,'msg':None} #这个就是自定的状态码成功默认100,登录成功或失败都会放入这个字典返回给前端
if request.method == 'POST':
print(request.POST) #这个在做防止跨站请求伪造的时候要写,然后把后面的都注释掉
     name = request.POST.get('name')
pwd = request.POST.get('pwd')
print(name,pwd)
# 从数据库获取数据
user = models.User.objects.filter(name=name,pwd=pwd).first()
# 这里逻辑就是成功和失败都会修改将字典中增加值,然后用json格式返回
if user:
dic['status'] = 100
dic['msg'] = '登录成功'
else:
dic['status'] = 101
dic['msg'] = '用户名或密码错误'
return JsonResponse(dic)

index.py

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/css/bootstrap.css">
<script src="/static/jquery-3.3.1.js"></script>
<title>我是index页面</title>
<style>
#errors {
color: red;
margin: 0 0 0 10px;
}
</style>
</head>
<body>
<h1>使用ajax实现登录功能</h1>
{#input里面为了让ajax获取到输入框输入的内容,需要设定id名 #}
   {% csrf_token %} #这个就是通过中间件防止跨站请求伪造攻击的,在页面的请求中加入一个随机的字符串
<p>用户名:<input type="text" name="'name" id="name"></p>
<p>密码:<input type="password" name="pwd" id="pwd"></p>
<button id="btn">点击登录</button><span id="errors"></span>
</body> <script>
//获取按钮,id就是#,如果是class就是.
$('#btn').click(function () {
$.ajax({
url:'/login/',
type:'post',
//取出输入框内中 写入的内容$('#name').val(),id就是#,class就是.
data:{'name':$('#name').val(),'pwd':$('#pwd').val(),'csrfmidlewaretoken':{{ csrf_token}}}, #上面登录框加了scrf,这里的括号里要携带csrf的随机码到后台
success:function (data) {
console.log(data)
//这里用if通过登陆吗判断登录成功与否
if (data.status==100){
//登录成功,则跳转至指定网页
//用前端的js代码跳转至指定的网页,location.href指定一个地址,则会跳转至指定的地址
location.href = 'http://www.baidu.com'
}else{
//朝id为errors的标签中写入数 据,这个就是局部刷新
$('#errors').text(data.msg)
}
}
}) })
</script>
</html>

models.py

from django.db import models

# Create your models here.

class User(models.Model):
'''建立一张表'''
name = models.CharField(max_length=32)
pwd = models.CharField(max_length=32)

(22)Ajax的基本使用(实现登录功能和局部刷新以及防止跨站请求伪造攻击)的更多相关文章

  1. python 全栈开发,Day87&lpar;ajax登录示例&comma;CSRF跨站请求伪造&comma;Django的中间件&comma;自定义分页&rpar;

    一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...

  2. 跨站请求伪造 &vert; ajax

    一.简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成.而对于django中设置防跨站请求伪造功 ...

  3. ajax向Django前后端提交请求和CSRF跨站请求伪造

    1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...

  4. Django框架 之 基于Ajax中csrf跨站请求伪造

    Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({     data: {csrfmiddlewaretoken: ...

  5. ajax跨站请求伪造

    用ajax提交数据到后台: {#<!DOCTYPE html>#} <html lang="en"> <head> <meta chars ...

  6. Ajax csrf跨站请求伪造

    方式一: ///仅限js代码在HTML内//// $.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, }); 方式二: // ...

  7. Django Ajax学习二之csrf跨站请求伪造

    方式1 $.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, }); 方式2 # html文件from表单中<form& ...

  8. Spring-Security&plus;Freemarker 开启跨域请求伪造防护功能

         CSRF简介--摘抄自<Spring实战(第4版)> 我们可以回忆一下,当一个POST请求提交到"/spittles"上时,SpittleController ...

  9. asp&period;net MVC中防止跨站请求攻击&lpar;CSRF&rpar;的ajax用法

    参考: Preventing Cross-Site Request Forgery (CSRF) AttacksValidating .NET MVC 4 anti forgery tokens in ...

随机推荐

  1. HB制作的app版本更新

    wgt下载成功,安装的时候报wgt包中的manifest.json文件的version必须要大于当前版本,所以每次提交wgt资源包的时候一定要记得大于当前的版本号

  2. html&comma;datepicker,datetimepicker时间控件使用

    1.My97DatePicker 传送门:点击打开链接 ps:My97DatePicker貌似对chrom不兼容 2.jquery日期选择/日历 http://www.oschina.net/proj ...

  3. 微信小程序开发&colon;Flex布局

    微信小程序页面布局方式采用的是Flex布局.Flex布局,是W3c在2009年提出的一种新的方案,可以简便,完整,响应式的实现各种页面布局.Flex布局提供了元素在容器中的对齐,方向以及顺序,甚至他们 ...

  4. 使用Jquery后去div个数

    <div id="tree1" class="tree-folder-content"> <div class="tree-fold ...

  5. 线段树菜鸟一题&plus;归并排序【求逆序数】POJ2299

    题目链接:http://poj.org/problem?id=2299 归并排序解法链接:http://blog.csdn.net/lyy289065406/article/details/66473 ...

  6. js操作string它substr方法

    substr 方法 从指定的指定起始位置的长度返回一个子. stringvar.substr(start [, length ]) 參数 stringvar 必选项. 要提取子字符串的字符串文字或 S ...

  7. Python作用域

    以下依据Python 3 1.Python变量查找顺序为LEGB(L:Local,E:Enclosing,G:Global,B:Built-in). 2.实际上,在Python中,只有模块,类以及函数 ...

  8. 通过向日葵(或者TeamViewer)创建VPN

    1.向日葵软件的安装比较简单.主要要开启VPN服务. 2.向日葵管理界面,添加机器. 3.组网. 4.作为VPN服务端机器(内网机器)安装传入的连接 5.外网客户端机器 一.登录向日葵客户端 一般使用 ...

  9. 使用matplotlib绘制多轴图

    一个绘图对象(figure)可以包含多个轴(axis),在Matplotlib中用轴表示一个绘图区域,可以将其理解为子图.上面的第一个例子中,绘图对象只包括一个轴,因此只显示了一个轴(子图).我们可以 ...

  10. java 深入理解内部类以及之间的调用关系

    什么是内部类 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和 ...