1.下面是login.js中ajax请求登陆代码:
function login(){
var username=$('#username').val()
var password=$('#password').val()
console.log(username)
console.log(password)
var data={
'username':username,
'password':password,
}
$.cookie('username',username)
var json_data=JSON.stringify(data)
send_url='http://127.0.0.1:8000/user/login/'
$.ajax({
url:send_url,
method:'POST',
data:json_data,
contentType:'application/json',
// xhrFields: {
// withCredentials: true
// },
headers: {"X-CSRFToken": $.cookie('csrftoken')},
dataType:'json',
success:function (e) {
alert(e.status)
location.href='/userinfo.html'
},
})
}
2.view.py中视图函数如下:
class UserLogin(GenericAPIView):
serializer_class = UserLoginSerializer
def post(self,request):
print(request.data)
serializer=self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
"""开始验证user,password"""
username=request.data['username']
password=request.data['password']
user = authenticate(username=username, password=password)
login(request,user)
"""由于这里没勾选条件,所以不加if record"""
trans_name=json.dumps(username)
print('转变后用户名类型',type(trans_name),trans_name)
# response.set_cookie('username',trans_name.decode())
return JsonResponse({'status':'登陆成功'})
注:上面的login()函数完成后居然没在浏览器中设置sessionid,之后在网上找到解决办法,在ajax请求中加入xhrFields: {withCredentials: true },即可,目的实现前端跨域设置
function login(){
var username=$('#username').val()
var password=$('#password').val()
console.log(username)
console.log(password)
var data={
'username':username,
'password':password,
}
$.cookie('username',username)
var json_data=JSON.stringify(data)
send_url='http://127.0.0.1:8000/user/login/'
$.ajax({
url:send_url,
method:'POST',
data:json_data,
contentType:'application/json',
xhrFields: {
withCredentials: true
},
headers: {"X-CSRFToken": $.cookie('csrftoken')},
dataType:'json',
success:function (e) {
alert(e.status)
location.href='/userinfo.html'
},
})
}