zoukankan      html  css  js  c++  java
  • form组件简单回顾

    列表添加元素的方式

    append 尾部追加

    extend 合并

    insert 按照索引任意位置插入

    批量插入数据

    models.Book.objects.create()  # 用该方法批量插入数据的时候 效率极低
    
    book_list = []
    for i in range(100000):
    	book_list.append(models.Book(...))
    
    models.Book.objects.bulk_create(book_list)
    
    

    自定义分页器

    1.queryset对象支持切片取值
    ...
    推导思路:
    	1.直接后端手动切片
    	2.url中通过get请求携带参数的方式 告诉后端到底想看第几页
    		url?page=1
    		current_page
    	3.规定一页到底展示几条数据  
    		per_page_num 
    	4.对整体数据进行切片操作
    		start_page = (current_page - 1) * per_page_num
    		end_page = current_page * per_page_num
    	5.前端渲染分页器页码
    		1.如何知道需要展示多少个页码
    			page_num, more = divmod(总数,每页展示的条数)
    			if more:
    				page_num += 1
    		2.在后端利用for循环将所有的页码生成出来 展示给前端
    	6.前端页码太多太多
    		1.借鉴中国人的审美 页码设置成奇数位
    		2.用户点击的当前页(高亮显示) 往前减五位  往后加五位
    		3.当用户点击的页码数小于6 页码不应该在动了
    			先定义个变量存储用户点击的当前页
    			判断页码是否小于6,如果小于6 还是让等于6
    直接封装成类的形式调用即可
    	1.将写好的代码找一个py文件存一下
    	2.导入该文件 用类实例化产生对象
    	3.利用对象的方法对数据进行切片
    		page_obj = Pagenation(current_page,all_count)
    		page_queryset = data_queryset[page_obj.start:page_obj.end]
    		
    		前端页面for循环page_queryset
    		利用{{ page_obj.page_html|safe }}
    
    

    forms组件

    使用:
    	1.你必须要先写一个类
    	from django import forms
    	class MyRegForm(forms.Form):
    		username = forms.CharField()
    		password = forms.CharField()
    		email = forms.EmailField()
    1.渲染前端页面
    	forms组件只能帮你渲染获取用户输入的标签 提交按钮需要你手动写
    	
    	三种渲染的方式
    	1.首先你需要在后端生成空的MyRegForm的对象 传递到前端
    		form_obj = MyRegForm()
    		1.
    			{{ form_obj.as_p }}
    			{{ form_obj.as_ul }}
    		2.
    			{{ form_obj.username.label }}{{ form_obj.username }}
    		3.
    			{% for foo in form_obj %}
    				{{ foo.label }}{{ foo }}
    				{{ foo.errors.0 }}
    			{% endfor%}       
    2.校验用户数据
    	1.需要给类传字典数据进行实例化
    		form_obj = MyRegForm({'username':'jason','password':'123','email':'123'})
    		# 1.如何判断传入的数据是否全部符合条件
    		form_obj.is_valid()
    		# 2.如何查看符合条件的数据
    		form_obj.cleaned_data  # 字典
    		# 3.如何查看没有通过校验的数据及原因
    		form_obj.errors  # 字典
    		"""
    		1.forms组件默认所有的字段都必须传值
    		2.不可以少传 但可以多传  多传的数据  不做任何处理
    		
    		"""
    		
    		
    3.展示错误信息
    	1.一堆参数
    		label = '用户名'
    		erros_messages = {
    			'required':'用户名不能为空'
    			...
    		}
    		初始值 
    		widget = forms.widgets.TextInput(attrs={'class':'form-conytrol'})
    		
    4.钩子函数(Hook)
    	全局钩子  
    		直接在类中写方法
    		eg:校验密码和确认密码是否一致
    		def clean(self):
    			password = self.cleaned_data.get('password')
    			password1 = self.cleaned_data.get('password1')
    			...
    			return self.cleaned_data
    	
    	局部钩子
    		eg:校验用户名中不能含有666
    		def clean_username(self):
    			username = self.cleaned_data.get('username')
    			if '666' in username:
    				self.add_error('username','光喊666是不行的')
    			return self.username
       
    
    5.额外的知识
    	1.还支持正则校验
    		username = forms.CharField(validator=[正则校验1,正则校验2,正则校验3])
    	2.额外的框
    		单选框
    		多选框
    
    
  • 相关阅读:
    hdu 1116 Play on Words
    hdu 1856 More is better
    跟随鼠标跑
    asp.net实现数据流文件下载
    在ASP.NET程序中集成更好的下载体验
    request.ContentType的可取值
    multipart formdata boundary 说明
    ASP.NET中实现多文件上传(普通)
    读取XML文件中的某个节点的某个属性
    获取请求的Headers部分
  • 原文地址:https://www.cnblogs.com/aden668/p/11765884.html
Copyright © 2011-2022 走看看