django中的ajax_post请求

Ajax_post请求,涉及到post请求就会遇到csrf问题,ajax的post请求,同样需要发生csrf_token。
相比较get请求,post请求:
1、需要一字典格式整合数据
2、需要一个csrf_token,键必须是csrfmiddlewaretoken
其他部分和get请求类似
1、静态页面 ajax_post.html




    
    Title
    


//ajax提交不在需要action method form来提交 {% csrf_token %} {% for u in userForm %}

{{ u }}

{% endfor %}

//label别名

2、视图文件 views.py

def  ajax_post(request):
    userForm=UserForm()
    return  render (request,"ajax_post.html",locals())
def ajax_post_data(request):
    result={"status":"error","content":"请求过来了"}
    if request.method=="POST":#如果请求类型是POST
        data=UserForm(request.POST)#将post请求的数据传递给UserForm进行校验
        #检验数据是否符合规定
        if  data.is_valid():#如果校验成功,返回true  #valid有效的
            clean_data=data.cleaned_data#返回一个放着校验过的数据的字典
            user = UserModel()#对象实例化
            user.username=clean_data.get("username")#规定
            user.password=clean_data.get("password")
            user.age=clean_data.get("age")
            user.email=clean_data.get("email")
            user.birthday=clean_data.get("birthday")
            user.save()#保存到数据库
            result["status"]="success"
            result["content"]="数据保存成功"
        else:
            result["content"]="
".join(data.errors) #errors result[content]=数据错误字段
数据错误字段 #多个错误字段之间用
分割 else: result["content"]="请求类型错误" return JsonResponse(result)#ajax得用Json/Json是一种数据格式

3、forms.py form表单文件

from  django  import   forms
class  UserForm(forms.Form):#与数据库类似,但不是数据库
    username=forms.CharField(required=False,label="用户名",help_text="用户名可以为空")
    password=forms.CharField(max_length=12,min_length=6,label="密码")#label是别名的意思
    age=forms.IntegerField(label="年龄")
    email=forms.EmailField(label="邮箱")
    birthday=forms.DateField(label="生日")
    def  clean_username(self):#所有自定义的效验的方法一定是clean_效验的字段名
        username=self.cleaned_data.get('username')
        if  "li"  in  username:
            raise  forms.ValidationError("昵称违规")
        else:
            return  username
            
    

4、数据库模型

from django.db import models

class  LoginUser(models.Model):
    username=models.CharField(max_length=32)
    password = models.CharField(max_length=32)
class UserModel(models.Model):#建立表单提交的数据库#表单数据库
    username=models.CharField(max_length=32)
    password=models.CharField(max_length=32)
    age=models.IntegerField()
    email=models.EmailField()
    birthday=models.DateField()
5、路由配置

path(‘ap/’,ajax_post),
path(‘apd/’,ajax_post_data),






你可能感兴趣的:(Django)