python django ajax 逻辑推理_Python-Django-Ajax进阶

ajax上传文件:

基于ajax上传文件

名字

文件

上传文件

$('#filebtn').click(function () {

//js取到文件

var myfile=$('#file')[0].files[0]

//生成一个FormData对象

var formdata=new FormData

//放值 //放文件

formdata.append('name',$('#filename').val())

formdata.append('myfile',myfile)

$.ajax({

url:'/fileupload/',

type:'post',

//这两个要必须写

processData:false, //不预处理数据 因为FormData 已经做了

contentType:false, //我不指定编码了 因为FormData 已经做了

data:formdata,

success:function (data) {

console.log(data)

alert(data)

}

})

})

# ajax文件上传

def fileupload(request):

if request.method == 'GET':

return render(request, 'fileupload.html')

if request.is_ajax():

name = request.POST.get('name')

# 文件对象

myfile = request.FILES.get('myfile')

import os

path = os.path.join('media', name)

with open(path, 'wb') as f:

for line in myfile:

f.write(line)

return HttpResponse('success')

django自带序列化:

# ajax page,了解,django自带的序列化

def page(request):

if request.method == 'GET':

users = UserInfo.objects.all()

# json序列

# user_dic = [{'name': user.name, 'age': user.age, 'id': user.id} for user in users]

# return JsonResponse(user_dic, safe=False, json_dumps_params={'ensure_ascii': False})

# 显示结果[{"name": "abc1", "age": 11, "id": 1}, {"name": "ewe", "age": 12, "id": 2}]

# 了解,django自带的序列化

user_dic = serializers.serialize('json', users)

return HttpResponse(user_dic)

# 显示结果[{"model": "app01.userinfo", "pk": 1, "fields": {"name": "abc1", "age": 11}}, {"model": "app01.userinfo", "pk": 2, "fields": {"name": "ewe", "age": 12}}]

批量插入数据bulk_create

# 批量插入数据bulk_create

def pagemass(request):

# # objes:对象列表,batch_size 一次插入数据的量

li = []

for i in range(200):

# UserInfo.objects.create() #老大方式

li.append(UserInfo(name='abc%s' % i, age=i + 1))

ret = UserInfo.objects.bulk_create(li, 20)

return HttpResponse('ok')

分页器组件:

# 分页器

from django.core.paginator import Paginator

def paging(request):

users = UserInfo.objects.all().order_by('pk')

paginator = Paginator(users, 20)

try:

currentpage = int(request.GET.get('page', 1)) # 默认显示第一页

page = paginator.page(currentpage)

except Exception as e:

# 出错时显示第一页

currentpage = 1

page = paginator.page(currentpage)

# 传入页码数,拿到的就是当前页对象

page = paginator.page(currentpage)

# 1 总页数是否大于11,当总页码数大于11

if paginator.num_pages > 11:

# 1.1 当前页码数是否小于6

if currentpage <= 6:

# 1.1.1 当当前页码小于6的时候,就生成11个页码数

page_range = range(1, 12)

# 1.2 当当前页码+5 大于等于总页码数

elif currentpage + 5 >= paginator.num_pages:

# 1.2.1 往后推11个页码数

page_range = range(paginator.num_pages - 10, paginator.num_pages + 1)

# 1.3 生成一个左5 右5的区间

else:

page_range = range(currentpage - 5, currentpage + 6)

# 2 总页码数不大于11 ,有多少,显示多少

else:

page_range = paginator.page_range

return render(request, 'page.html', locals())

idnameage

{# 循环的时page不是users#}

{% for user in page %}

{{ forloop.counter }}{{ user.name }}{{ user.age }}

{% endfor %}

{# 上一页判断#}

{% if page.has_previous %}

上一页

{% else %}

上一页

{% endif %}

{# 判断当前页面是否是循环到的页码,如果是,加active#}

{% for foo in page_range %}

{% if currentpage == foo %}

{{ foo }}

{% else %}

{{ foo }}

{% endif %}

{% endfor %}

{# 下一页判断#}

{% if page.has_next %}

下一页

{% else %}

下一页

{% endif %}

forms组件:(数据校验功能)

name

pwd

email

forms的模板渲染之一(推荐)

name: {{ myform.name }}

pwd: {{ myform.pwd }}

email: {{ myform.email }}

forms的模板渲染之二(推荐!!!!!)

{% for item in myform %}

{{ item.label }}:{{ item }}

{% endfor %}

forms的模板渲染之三

{{ myform.as_p }}

from django import forms

# 继承Form这个类

class MyForm(forms.Form):

# 限制name这个字段最长为8,最短为3

name=forms.CharField(min_length=3,max_length=8,label='用户名',required=True,error_messages={'min_length':'至少为3','max_length':'最长为8,您太长了'})

pwd=forms.CharField(min_length=3,max_length=8,label='密码',error_messages={'min_length':'至少为3','max_length':'最长为8,您太长了'})

email=forms.EmailField(label='邮箱',error_messages={'invalid':'邮箱格式不合法','required':'这个字段必填'})

# ajax register

def register(request):

if request.method == 'GET':

myform=MyForm()

return render(request, 'register.html',locals())

else:

# 生成对象,传参,传字典,要校验数据的字典

# myform=MyForm(request.POST)

# 自己写要校验的字典,数据多了,多的是不校验的,但是cleaned_data中也没有多出来的数据

# dic={'name':'lqz','pwd':'123','email':'22@qq.com','xx':'xxx'}

# dic={'name':'lqz','pwd':'123','email':'22'}

# dic = {'name': 'abc', 'pwd': '122', 'email': '5555'}

name=request.POST.get('name')

pwd=request.POST.get('pwd')

email=request.POST.get('email')

dic = {'name': name, 'pwd': pwd, 'email': email}

print(dic)

myform = MyForm(dic)

# 所有字典都校验通过,它就是True的

if myform.is_valid():

# 取出校验通过的数据

clean_data=myform.changed_data

print(clean_data)

# models.UserInfo.objects.create(**clean_data)

else:

# 所有的错误信息

# 只要是校验通过的值,都在cleaned_data中放着

print(myform.changed_data)

print(myform.errors.as_data())

# 字典类型

print(type(myform.errors))

print(myform.errors.get('name'))

from django.forms.utils import ErrorDict

return HttpResponse('OK')

ajax总结:

1 默认编码urlencode,后端按照原来form表单提交的形式取值就可以了()

2 上传文件,form-data编码,后端按照原来form表单提交的形式取值就可以了,取数据从POST中取,取文件从FILES中取

3 上传json格式,django不会处理数据,需要自己处理,自己从body体中取出数据处理

TTL:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值