django框架八

news/2024/5/6 23:16:31/文章来源:https://www.cnblogs.com/tzmy/p/16671014.html
  • 批量操作数据
  • 自定义分页器(重在思路)
  • form组件
  • modelform组件
  • cookie与session简介

批量操作数据

浏览器访问一个django路由 立刻创建10万条数据并展示到前端页面create()、all()
涉及到大批量数据的创建 直接使用create可能会造成数据库崩溃批量数据创建>>>:bulk_create() 批量数据修改>>>:bulk_update()def index(request):# book_list = []# for i in range(100000):#     book_obj = models.Book(title=f'第{i}本')#     book_list.append(book_obj)"""列表生成式"""# models.Book.objects.bulk_create(book_list)  # 批量创建book_query = models.Book.objects.filter()  # 查询所有数据return render(request, 'book_list.html', locals())

批量数据展示

当数据量比较大的时候 页面展示应该考虑分页
1.QuerySet切片操作
2.分页样式添加
3.页码展示如何根据总数据和每页展示的数据得出总页码divmod()
4.如何渲染出所有的页码标签前端模板语法不支持range 但是后端支持 我们可以在后端创建好html标签然后传递给html页面使用
5.如何限制住展示的页面标签个数页码推荐使用奇数位(对称美)  利用当前页前后固定位数来限制
6.首尾页码展示范围问题
"""
上述是分页器组件的推导流程 我们无需真正编写django自带一个分页器组件 但是不太好用 我们自己也写了一个
"""

自定义分页器

from app01.plugins import mypage  # 导一个自定义模块
book_query = models.Book.objects.all()
page_obj = mypage.Pagination(current_page=request.GET.get('page'),all_count=book_query.count())  # 传两个参数即可
page_query = book_query[page_obj.start:page_obj.end]  # 开始对象和结束对象
return render(request, 'bookList.html', locals())  # 返回一个页面{% for book_obj in page_query %}
<p class="text-center">{{ book_obj.title }}</p>
{% endfor %}
{{ page_obj.page_html|safe }}

form组件

1.初始阶段
后端:
def form(request):data_dict = {'username': '', 'pwd': ''}  # 定义字典传到前端if request.method == 'POST':name = request.POST.get('username')pwd = request.POST.get('password')if name == 'jason':data_dict['username'] = '你不能使用jason'  # 通过post请求传来的数据进行判断然后修改字典再次传到前端直接使用即可if pwd == '123':data_dict['pwd'] = '密码不能使用123'print(data_dict)return render(request, 'form.html', locals())前端:
form action="" method="post"><p>username<input type="text" name="username"><span style="color: red">{{ data_dict.username }}</span>
</p>
<p>password<input type="text" name="password"><span style="color: red">{{ data_dict.pwd }}</span>
</p><input type="submit" value="提交">
</form>2.form组件1.数据校验支持提前设置各种校验规则 之后自动校验2.渲染页面支持直接渲染获取用户数据的各种标签3.展示信息支持针对不同的校验失败展示不同的提示
创建form类
from django import forms
class MyForm(forms.Form):name = forms.CharField(max_length=7, min_length=3)  # name字段最少3位最多7位pwd = forms.CharField(max_length=8, min_length=3)  # pwd最少三位email = forms.EmailField()  # 限制邮箱1.数据校验功能1.1.传递待校验的数据form_obj = views.MyForm({'name':'jason','age':18,'email':123})1.2.判断所有的数据是否符合校验form_obj.is_valid()1.3.获取符合校验规则的数据form_obj.cleaned_data{'name': 'jason', 'age': 18}1.4.查阅不符合校验规则的数据及错误原因form_obj.errors{'email': ['Enter a valid email address.']}"""1.form类中编写的字段默认都是必填的 少传则肯定通不过校验 is_valid2.校验如果多传了一些字段 则不参与校验 全程忽略"""
2.渲染标签
2.1产生一个对象
def func(request):form_boj = MyForm()return render(request,'func.html',locals())
2.2
<form action="">
{#模版语法自带注释#}
{#    第一种 封装贼高扩展性差#}
{#    {{ form_boj.as_p }}#}
{#    第二种封装低很麻烦#}
{#    {{ form_boj.name.label }}{{ form_boj.name }}#}
{#    {{ form_boj.pwd.label }}{{ form_boj.pwd }}#}{% for form in form_boj %}{{ form.label }}{{ form }}{% endfor %}<input type="submit" value="提交">
</form>
3.展示提示信息
form 表单取消前端校验加novalidate参数即可
提示信息修改参数
class MyForm(forms.Form):name = forms.CharField(max_length=7, min_length=3,error_messages={'max_length': '用户名最多7位','min_length':'用户名最少为3位','required':'用户名不能为空'})  # name字段最少3位最多7位pwd = forms.CharField(max_length=8, min_length=3)  # pwd最少三位email = forms.EmailField(error_messages={'invalid':'邮箱格式不正确'})  # 限制邮箱{% for form in form_boj %}<p>{{ form.label }}{{ form }}<span style="color: red">{{ form.errors.0 }}</span>  # errors是一个列表</p>{% endfor %}<input type="submit" value="提交">

组件参数

重要的字段参数max_length、min_lengthmax_value、min_valuelabel				字段注释
label ='字段名'error_messages		  错误提示required			  是否为空widget				 标签类型、标签属性
widget=forms.widgets.TextInput(attrs={'class':'form-control'})initial				  默认值validators			  正则校验

image

狗子函数

简介:提供自定义的校验方式类似于将数据拿出校验之后还回去单个字段:def clean_name(self):name = self.cleaned_data.get('name')res = models.User.objects.filter(name=name)if res:self.add_error('name', '%s已存在' % name)return name  # 返回name字段数据
多个字段def clean(self):pwd = self.cleaned_data.get('pwd')confirm_pwd = self.cleaned_data.get('confirm_pwd')if not pwd == confirm_pwd:self.add_error('confirm_pwd','密码不一致')return self.cleaned_data  # 返回所有的数据##################################################################################
'''form组件代码校验完整代码'''
from django import formsclass MyForm(forms.Form):name = forms.CharField(max_length=7, min_length=3,error_messages={'max_length': '用户名最多7位','min_length': '用户名最少为3位','required': '用户名不能为空'},initial='jason',widget=forms.widgets.TextInput(attrs={'class': 'form-control'}))  # name字段最少3位最多7位pwd = forms.IntegerField()  # pwd最少三位confirm_pwd = forms.IntegerField()email = forms.EmailField(error_messages={'invalid': '邮箱格式不正确'},)  # 限制邮箱# 校验用户名是否存在def clean_name(self):name = self.cleaned_data.get('name')res = models.User.objects.filter(name=name)if res:self.add_error('name', '%s已存在' % name)return name# 校验两次用户名是否一致def clean(self):pwd = self.cleaned_data.get('pwd')confirm_pwd = self.cleaned_data.get('confirm_pwd')if not pwd == confirm_pwd:self.add_error('confirm_pwd','密码不一致')return self.cleaned_datadef func(request):form_boj = MyForm()if request.method == 'POST':form_boj = MyForm(request.POST)if form_boj.is_valid():  # 判断是否所有数据符合res = form_boj.cleaned_dataprint(res)models.User.objects.create(**res)  # 所有校验成功后将数据写入数据库将字典打散成k=v写入数据库else:print(form_boj.errors)  # 错误的数据return render(request, 'func.html', locals())

modelform组件

class MyModelForm(forms.ModelForm):class Meta:model = models.Userfields = '__all__'def clean_name(self):name = self.cleaned_data.get('name')res = models.User.objects.filter(name=name)if res:self.add_error('name', '%s已存在' % name)return namedef model_form(request):model_form_obj = MyModelForm()if request.method == 'POST':model_form_obj = MyModelForm(request.POST)if model_form_obj.is_valid():model_form_obj.save()  # 保存return render(request, 'model_form.html', locals())修改
def model_form(request):model_form_obj = MyModelForm()if request.method == 'POST':edit_obj = models.User.objects.filter(name='jason').first()  # 先获取修改的对像可以将条件通过其他方法传过来类似get请求或者ajaxmodel_form_obj =MyModelForm(request.POST,instance=edit_obj)  # 将对象传到form对象中if model_form_obj.is_valid():model_form_obj.save()  # 修改return render(request, 'model_form.html', locals())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_6031.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

07- 诊断事件diagnostic events的类图关系

文章目录 1 DEM模块的诊断事件diagnostic events的类图关系2 各个参数的含义介绍1 DEM模块的诊断事件diagnostic events的类图关系 这个时DEM模块的诊断事件diagnostic events的类图关系。 关于其在Davinci中的体现,请参考【06- 诊断事件DemEventParameter的配置】文章的介绍…

【日常】edge和chrome浏览器截屏工具快捷键

首先打开开发者工具 使用右键===>检查 就能打开开发者模式 在开发者模式下,快捷键ctrl+shift + p然后输入截屏,就能看到了 开源作品 GOFLY是一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的在线客服系统,编译后的二进制文件可…

mysql在移机后的机器上配置(该机器重装了操作系统)

说明一切就绪后,唯有mysql没起来 连接本地数据库,mysql提示Can‘t connect to MySQL server on localhost (10061)解决办法_Geeca的博客-CSDN博客 https://blog.csdn.net/Geeca/article/details/125924886 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决_java奋…

PowerShell中异步方法的使用

问题 PowerShell脚本中有个文件上传功能,使用HttpClient 脱敏处理后基本就是这样子 $client = new-object System.Net.Http.HttpClient; $result = $client.PostAsync($URL,@{}).Result;别问为什么不用await,问就是有原因某天程序执行后,$result始终为空,也无异常 经过艰苦卓…

html对象常用属性和Window 对象属性

​/* *作者:呆萌老师 *☑csdn认证讲师 *☑51cto高级讲师 *☑腾讯课堂认证讲师 *☑网易云课堂认证讲师 *☑华为开发者学堂认证讲师 *☑爱奇艺千人名师计划成员 *在这里给大家分享技术、知识和生活 *各种干货,记得关注哦! *vx:it_daimeng */ html对象常用属性 取值赋值:inn…

Javaweb学习笔记第四弹

JDBC API详解 1、DriverManager作用: 1、注册驱动 registerDriver 2、获取数据库连接 getConnection 参数:1、url jdbc:mysql://localhost:3306/数据库名称 ​ 2、user 用户名 ​ 3、password 密码 注意:在url中,如果连接的是本机,并且…

Educational Codeforces Round 132 (Rated for Div. 2) A.B.D

A. Three Doors 题目链接&#xff1a; Problem - A - Codeforces 题面&#xff1a; 题意&#xff1a; 共有三扇门&#xff0c;一开始你有一把钥匙&#xff0c;有两扇门后面有钥匙&#xff0c;一扇门后面没有钥匙&#xff08;如果有钥匙&#xff0c;就会告诉你可以开哪扇门&am…

【Servlet】这一文详细的讲述了Servlet的知识,呕心沥血,终于文成。

文章目录什么是Servlet&#xff1f;Servlet的使用1、创建一个Web项目&#xff0c;并集成Tomcat2、引入Servlet的依赖3、创建一个Web启动类第一个是重写Servlet接口第二个是继承HttpServletServlet的理解Servlet的执行流程Servlet的生命周期加载和实例化阶段初始化阶段请求处理服…

202112-2 CCF 序列查询新解 (枚举 + 分段讨论 满分题解)

问题描述 序列查询新解 题目链接 解题思路 这个是上一道题目总结出来的规律 就是 f(x) i 当x属于 【a[i], a[i 1] &#xff09; 这个区间 也就是在这个区间里f(x)都等于一个数i 再看g(x)这个函数&#xff0c;g(x&#xff09; x / 常数&#xff0c;也可以知道&#xff0c;g…

微服务技术初探(go-micro)

微服务技术初探 微服务概述 微服务是近几年产生的新概念,与传统的单体式服务相比,微服务具有更好的扩展性及低耦合度等特性。微服务的重点在于服务的治理和调度。 微(micro):狭义来说就是体积小。 服务(service):区别于系统,服务一个或者一组相对较小且独立的功能单元,是…

c语言实现通讯录

目录标题通讯录的介绍通讯录的准备通讯录的初始化通讯录的添加通讯录的打印通讯录的查找并打印通讯录的删除通讯录的排序通讯录的修改通讯录的改善动态通讯录的实现以文件的形式存储通讯录的介绍 通讯录想必大家都应该不陌生&#xff0c;我们在手机里面都会有通讯录里面记录着…

爬虫数据可视化前的环境准备(已安装python环境前提下)

一、requests请求库安装 在桌面右键打开终端输入:pip install requests 二、Beautiful Soup解析库安装 终端输入:Beautiful Soup 4安装:pip install bs4 lxml安装:pip install lxml三、matplotlib安装下载miniconda下载地址:https://docs.conda.io/en/latest/miniconda.ht…

CF102411 ICPC 2019-2020 North-Western Russia Regional Contest题解

A Accurate Movement 签到 M Managing Difficulties 签到 B Bad Treap 已知\(y=\sin(x)\),要求给出数组\(a[n]\),满足\(\forall i,j\in[1,n],a[i]\neq a[j]\),都有\(\sin(a[i])\neq \sin(a[j])\)。 这里又一种不怎么玄的写法,就是我们找到一个整数\(x\),\(sin(x)\)非常非常…

计算机的概述

计算机是由硬件系统(hardware system)和软件系统(software system)两部分组成的。硬件系统电源电源是电脑中不可缺少的供电设备,它的作用是将220V交流电转换为电脑中使用的5V、12V、3.3V直流电,其性能的好坏,直接影响到电脑其他设备工作的稳定性,进而会影响整机的稳定性…

AXI MCDMA 仿真与工作流程分析

说明 关于背景知识,可以先看 https://www.cnblogs.com/xingce/p/16386108.html 引用一段官方的说明,AXI MCDMA存在的主要目的是为了节约资源,我们想要使用这个模块的主要目的也是为了降低资源消耗,从而可以将系统部署在更小面积的FPGA芯片上,当然,具体的效果还需要进一步…

软件定义网络第一次作业,问题与解决方法

软件定义网络第一次作业,问题与解决方法 实验结果截图:实验总结: 1.若使用VMware Workstation Pro。 版本最好使用20.04版本,网络较稳定且兼容性好。且22.04版本可能无法安装Vmware tools。 2.遇到网络无法访问,可尝试换源。 3.若需要压缩包,可在虚拟机中下载,或从电脑拖…

【kali】一款黑客们都在使用的操作系统

&#x1f495;&#x1f495;&#x1f495; 博主昵称&#xff1a;摆烂阳&#x1f495;&#x1f495;&#x1f495; &#x1f970;博主主页跳转链接 &#x1f469;‍&#x1f4bb;博主研究方向&#xff1a;web渗透测试 、python编程 &#x1f4c3; 博主寄语&#xff1a;希望本篇文…

共享单车需求量登记分类及影响因素分析——基于机器学习模型的比较分析

全文链接&#xff1a;http://tecdat.cn/?p28519 作者&#xff1a;Yiyi Hu 近年来&#xff0c;共享经济成为社会服务业内的一股重要力量。作为共享经济的一个代表性行业&#xff0c;共享单车快速发展&#xff0c;成为继地铁、公交之后的第三大公共出行方式。但与此同时&…

【笔记】Python网络爬虫与信息提取

实战&#xff1a;总结知识点疫情爬虫Re正则表达式Re库的使用scrapy爬虫框架介绍Scrapy常用命令网络爬虫技术亮点&#xff1a;1、采用requests发送请求&#xff0c;获取响应2、采用BeautifulSoup4解析页面数据3、采用正则表达式 提取不规则字符串4、采用json模块处理json格式数据…

Java架构师常见基础面试题(附答案)

随着每日确诊病例人数的减少以及治愈患者人数增多&#xff0c;随着这场抗“疫”战争即将以胜利告终&#xff0c;接踵而来的是企业复工、金三银四求职高峰季的来临。有很多Java工程师想要把握住这个机会&#xff0c;实现升职加薪、成为Java架构师。但你知道企业在招聘面试时会提…