day77
批量插入数据:
-queryset的方法:bulk_create(对象列表,数字(一次插入多少))
分页器:
from django.core.paginator import Paginator
book_list=models.Book.objeces.all()
pageinator=Paginator(book_list,10)
pageinator.cout
pageinator.num_pages
pageinator.page_range
#生成当前页码对象
current_page=pageinator.page(当前页)
current_page.object_list
current_page.has_next()
current_page.has_pervious()
上一页页码数
下一页页码数
前端:
-模板语言for循环,输出所有页码数
-总页码数不够11,有多少,就输出多少
-总页码数大于11,
-当前页码数<6:page_range=range(1,12)
-当前页码+5>总页码数:page_range=range(pageinator.num_pages-10,pageinator.num_pages+1)
-其他情况:page_range=range(current_page_num-5,current_page_num+6)
-点中页码跳转
-'?page=13'
-'/index/?page=13'----->路径不要忘掉前面的斜杠
今日内容
forms组件
-forms是什么?
就是一个类,可以校验字段(前台传过来的字段)
-怎么用:
-校验字段功能:
-先写一个类,继承Form
from django.shortcuts import render, HttpResponse
from django import forms
# 写一个类,要校验那些字段,就是类的属性
class MyForm(forms.Form):
# 定义一个属性,可以用来校验字符串类型
# 限制最大长度是8,最小长度是3
name=forms.CharField(max_length=8,min_length=3)
pwd=forms.CharField(max_length=8,min_length=3,required=True)
# 校验是否是邮箱格式
email=forms.EmailField()
-使用:
# 校验字段功能
def index(request):
if request.method == 'GET':
return render(request, 'index.html')
elif request.method == 'POST':
# print(request.POST)
form = User(request.POST)
if form.is_valid():
# 校验正确的数据
print(form.cleaned_data)
else:
# 校验正确的数据
print(form.cleaned_data)
# 校验错误的字段:"错误的信息"
print(form.errors)
# 错误的信息
print(form.errors.get('name'))
return HttpResponse('OJBK')
-渲染模板
{#方式一#}
<form action="" method="post" novalidate>
<p>{{ form.name.label }}{{ form.name }}</p>
<p style="color: red">{{ form.name.errors.0 }}</p>
<p>{{ form.pwd.label }}{{ form.pwd }}</p>
<p style="color: red">{{ form.pwd.errors.0 }}</p>
<p>{{ form.email.label }}{{ form.email }}</p>
<p style="color: red">{{ form.email.errors.0 }}</p>
<input type="submit" id="btn" value="登陆">
</form>
{#方式二#}
<form action="" method="post" novalidate>
{% for foo in form %}
<p>{{ foo.label }}{{ foo }}</p>
{% endfor %}
</form>
{#方式三#}
<form action="" method="post" novalidate>
{{ form.as_p }}
- myforms有errors
-属性(name)也有errors
-错误信息,变成中文:
- error_messages={'max_length': '最长是8', 'min_length': '最短是3', 'required': '这个必须填','invalid': '不符合邮箱格式'}
-给input标签指定样式,指定格式:
-widget=widgets.TextInput(attrs={'class':'form-control'})
-模板,渲染错误信息:<span>{{ myform.name.errors.0 }}</span>
-局部钩子校验
-定义一个函数,名字叫:clean_字段名字,内部,取出该字段,进行校验,如果通过,将该字段返回,如果失败,抛异常(ValidationError)
- def clean_name(self):
# self:当前form对象
name = self.cleaned_data.get('name')
if name.startswith('sb'):
# 失败,抛异常
raise ValidationError('不能以sb开头')
# 正常,把name返回
return name
def clean_name(self):
name = self.cleaned_data.get('name')
res = models.User.objects.filter(name=name)
if res:
raise ValidationError('用户名重复')
return name
-全局钩子
#重写clean方法
def clean(self):
#程序能走到该函数,前面校验已经通过了,所以可以从cleaned_data中取出密码和确认密码
pwd=self.cleaned_data.get('pwd')
re_pwd=self.cleaned_data.get('re_pwd')
#进行自己的校验
if pwd==re_pwd:
#通过,直接返回cleaned_data
return self.cleaned_data
else:
#失败,抛异常(ValidationError)
raise ValidationError('两次密码不一致')
def clean(self):
pwd = self.cleaned_data.get('pwd')
re_pwd = self.cleaned_data.get('re_pwd')
if pwd == re_pwd:
return self.cleaned_data
else:
raise ValidationError('两次密码不一致')
day77的更多相关文章
- python 全栈开发,Day77(图书管理系统)
一.图书管理系统 完整代码链接: https://github.com/py3study/bms_multi 本项目使用session来实现一个简单的图书管理系统 未登录不允许访问后台: 直接访问后台 ...
- day77 作业
目录 一.完成todolist案例 二.商品页面 一.完成todolist案例 <!DOCTYPE html> <html lang="en"> <h ...
- day77 vue对象提供的属性功能
目录 一.过滤器 二.计算属性(computed) 三.侦听属性(watch) 四.vue对象的生命周期 五.阻止事件冒泡和刷新页面 六.综合案例-todolist 一.过滤器 定义:就是vue允许开 ...
- day77:luffy:导航栏的实现&DjangoRestFramework JWT&多条件登录
目录 1.导航栏的实现 2.登录前戏:用户表初始化 3.DjangoRestFramework JWT 4.多条件登录 5.登录状态的判断和退出登录 1.导航栏的实现 1.设计导航栏的model模型类 ...
- ORM表操作
1.在python脚本中调用django环境 在根文件夹下,创建test.py文件 import os if __name__ == '__main__': os.environ.setdefault ...
- Python面向对象之方法
普通方法要执行类里面的方法是通过对象触发的 触发的时候把自己赋值给self 类方法 vim day7-7.py #!/usr/bin/python # -*- coding:utf-8 -*- cla ...
- day 77 基于form组件的注册功能
Form 表单 py文件 from django import forms #定义一个form类注册用 class RegForm (forms.Form): username =forms.Char ...
- day 75天 bbs 项目第一天 ,auth登陆
from django.db import models from django.contrib.auth.models import AbstractUser class UserInfo(Abst ...
- 巨蟒python全栈开发linux之centos6
1.nginx复习 .nginx是什么 nginx是支持反向代理,负载均衡,且可以实现web服务器的软件 在129服务器中查看,我们使用的是淘宝提供的tengine,也是一种nginx服务器 我们下载 ...
随机推荐
- IO流作业
IO流作业 一. 填空题 Java IO流可以分为 字节流 和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道 ...
- ThinkPHP5下自己写日志
1.首先在common.php公共函数文件下写需要的公共函数(appalication/common.php文件下),在此文件下写的函数可以在项目任意页面直接调用 /** * 打印log日志 * @p ...
- javax.net.ssl.SSLHandshakeException sun.security.validator.ValidatorException PK
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f ...
- apache2.2 +php7.3安装 编译安装
1.下载 http://archive.apache.org/dist/httpd/httpd-2.2.0.tar.gz tar -xvf httpd-2.2.0.tar.gz 2.安装 ./conf ...
- PHP-隐藏手机号中间四位
substr_replace('手机号', '****', 3, 4);
- Intellij IDEA去除@Autowired下划线红色提示
Intellij IDEA通过@Autowired注入的对象,在不改变配置的情况下一直有红色下划线,虽然不影响运行,但是跟小Alan一样有强迫症的肯定受不鸟. 那么怎么去除它呢? 解决方式:改变@Au ...
- Bootstrap源码分析系列之初始化和依赖项
在上一节中我们介绍了Bootstrap整体架构,本节我们将介绍Bootstrap框架第二部分初始化及依赖项,这部分内容位于源码的第8~885行,打开源码这部分内容似乎也不是很难理解.但是请站在一个开发 ...
- GIT回推本地commit近期版本
一次意外吧,本地add并且commit之后拉了别人错误的代码下来,后来本地又需要进行编写测试,无奈只能回推到自己刚刚commit过的代码,但是git命令除了拉去提交等其他的不是很熟悉,在度娘之后也遇到 ...
- AForge.NET简介
AForge.NET是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器 ...
- continue break exit用法说明
1,continue用法 2,break用法 3,sys.exit用法 1,continue用法(跳出本次循环,继续下次循环) for i in xrange(10): if i == 8: cont ...