day70

d自定义分页

保存搜索条件

搜索用户信息

公户和私户

批量操作

1 xxpy添加100个

os  main   os.envion.setting  import django  dj.setup()		from app import models
l1 = []
for i in range(1,101):
	obj = models.Customer()
	qq = 下面的 ''.join([str(i) for i in random.choices(range(1,10),k = 11)])
	name = 'hua'+str(i)
	sex = random.choice(['male','fem'])
	source = rand.ch(['qq','ref','we'])
	course= r.c(['li','py'])
l1.appedn(obj)
models.custom.objects.bulk_create(*l1)

random测试

imp random random.choices(range(1,10),k= 11)[1,2.]
k1 = [str(i) for i in l1]
l1 = ''.join(l1)  2132434435

views.py

def customer():# 筛选,yixiong看不到小黑
	customer_page_num =requ.GET.get('page',1)
	all_customers = models.Customer.obj.filter(con=True)
    mod.Cu.ob.filter(csultant__isnull=True)
	#判断是不是空的字符串  公户	
	return render(req,'custom.html',lo)
#私户
def mycustomers(reque):
	my_customer = m.C.o.filter(consultant=request.user)#对象
	return render(req,'mycust.html',lo)

from nbapp import page
def test(request):
	#太多了
	current_page_num = request.GET.get('page',1)
	#0 : 10
	#10 : 20
		num-1 *10 num*10
	start_num = int(cunrr_page_num)-1)*10 
	end_num = int()*10 
	
	page_number = 10 
	all_data = m.c.o.all() 
	total_count = all_data.count()
	
	
	all_data = m.c.o.all()[start,end]
	
	ret_html ,start_num,end_num= page.pagenation(request.path,current_page_num,total_count,per_page_counts,page_number)路径不带参数	#传过路径
				
	return render(request,test.html,locals())
	
实例化能够实例化一个标签的功能
def register(requ):
	form_obj = UserForm()
	if request.method == 'GET':	
	
	else:
		form_obj = UserForm(req.PO)校验了{‘name’:'122',''...}
	if form_obj.is_valid():  #验证
		data = from_obj.clean_data 都是存正确的	所有的检测一遍才完,   
		return redirect('login')
	else :
    	return render(request,'re',lo)
    	重新刷新返回前端了显示错误
前端 field.errors.0第一个错误  .2 第三个 

test.html

table	
	th
	tr th 
	{% for data in all_data
		data.name
		
	{ret_Html|safe}

mycustomers

{extends 'base.html %}

base.html

fa fa-link	我的客户
url {'mycustomers'} 客户信息到yixiong

urls.py

#注销
url(r'^logout/',views.logout,name='l')
#公户
url(r'^customers/list/',v.custom,name='cust'),	
#私户
url(r'^customers/list/',v.custom,name='cust'),

分页 :

page.py 测试

from nbapp import models
def pagenation(base_url,current_pag,total_counts,per_page = 10 ,page_num=5):
	'''
	total数据总数
	per_page_counts每页分多少条
	current_page_num当前页
	page_num 	=页码显示多少页	
	'''
	#all_obj_li=mols.Cust.objs.all()		#不写死,用别的book呢? 不在这写 
	total_coutn = all_o.count()
	per_page_counts = 10 
	
	try :
		current_page_num = int(current_page_num)
	except Exception:
    	start_num = 1 
  	
    if current_page_num <1 :
    	current_page_num =1 
	if 
    	
    
	page_number = 
	总页数
	s,y=divmod(total_cnt,per_page) 商余   
	half_page_range = page_numb//2 整除	 
上一页	  
	if a:   
		page_num += 1       
	#页码数显示 多少条   
	if page_number_count <= page_numbe:   
		pag = 1              
		page_end = page_num   
	else:
		if current_page < half_page:
    	page_start = 1
    	page_end = page_number
	    elif cu+half > page_number:
	      page_start= page_nu -page_num 
	    else:
        	pae_st = cu - half
        	pae_end =cu + half
        	
	tab_html = ''
	tab_html+= '<>'	当前页
	if current_page_num ==1 :
		previous_page = 'li<a disable href ='#' al
	else:		
		previous_page = 'li<a href ='href = '{0}' page={1} -1 al.format(base_url,i)

	for i in range(1,page_num+1):取不到
		one_page = 'li a href = {0} class='active' page={1}> {1}夹的页数'.format(base_url,i)
		+%i
        table_html+= ''
        
下一页      
	if current_page_num == page_number_count:
		nuex_page = 'li disable'
	else:
		next_page = .format(base_url,current_page_num+1)
		
	return table_html  ,start_num,end_num 
    
    
    
封装成一个类
class PageNation:
	def __init__(self,base_url,current_,total,per_page,page_numb)
	"base_url:分页信息基础路径 当前页码  总的数据另  每页显示的数据量  显示页码数""

self.base_url = base_url 
self.current_page_num =current_page_num
....
try : self.cur = int(curent)
except Exce: self.current_ = 1 

@property
def start_num(self):start_num = (self....) return 
@property
def end_num(self):end_num = (self....) return 


p_obj = PageN(....)
all_data = models.Cu.ob.all()[p_obj.start_num]

自定义分页,之后直接使用,功能要全

view.py

from nbapp import models

def pagenation(base_url,current_page_num,total_counts,per_page_counts=10,page_number=5):
    '''
    total_counts数据总数
    per_page_counts每页分多少条数据
    page_number = 页码显示多少个
    current_page_num 当前页
    :return:
    '''
    # all_objs_list = models.Customer.objects.all()
    # total_counts = all_objs_list.count()
    per_page_counts = 10
    # page_number = 5

    try:
        current_page_num = int(current_page_num)

    except Exception:
        current_page_num = 1


    half_page_range = page_number//2
    #计算总页数
    page_number_count,a = divmod(total_counts,per_page_counts)
    if current_page_num < 1:
        current_page_num = 1


    if a:
        page_number_count += 1
    if current_page_num > page_number_count:
        current_page_num = page_number_count

    start_num = (current_page_num - 1) * 10
    end_num = current_page_num * 10

    if page_number_count <= page_number:
        page_start = 1
        page_end = page_number_count
    else:
        if current_page_num <= half_page_range:
            page_start = 1
            page_end = page_number
        elif current_page_num + half_page_range  >= page_number_count:
            page_start = page_number_count - page_number + 1
            page_end = page_number_count
        else:
            page_start = current_page_num - half_page_range
            page_end = current_page_num + half_page_range


    '''
        <nav aria-label="Page navigation">
          <ul class="pagination">
            <li>
              <a href="#" aria-label="Previous">
                <span aria-hidden="true">&laquo;</span>
              </a>
            </闪电>
            <li><a href="#">1</a></闪电>
            <li><a href="#">2</a></闪电>
            <li><a href="#">3</a></闪电>
            <li><a href="#">4</a></闪电>
            <li><a href="#">5</a></闪电>
            <li>
              <a href="#" aria-label="Next">
                <span aria-hidden="true">&raquo;</span>
              </a>
            </闪电>
          </ul>
        </nav>
    '''

    tab_html = ''
    tab_html += '<nav aria-label="Page navigation"><ul class="pagination">'

    #上一页
    if current_page_num == 1:
        previous_page = '<li disabled><a href="#" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></闪电>'
    else:
        previous_page = '<li><a href="{0}?page={1}" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></闪电>'.format(base_url,current_page_num-1)
    tab_html += previous_page

    for i in range(page_start,page_end+1):
        if current_page_num == i:

            one_tag = '<li class="active"><a href="{0}?page={1}">{1}</a></闪电>'.format(base_url,i)
        else:
            one_tag = '<li><a href="{0}?page={1}">{1}</a></闪电>'.format(base_url, i)
        tab_html += one_tag


    #下一页
    if current_page_num == page_number_count:
        next_page = '<li disabled><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></闪电>'
    else:
        next_page = '<li><a href="{0}?page={1}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></闪电>'.format(base_url,current_page_num+1)
    tab_html+=next_page
    tab_html += '</ul></nav>'

    return tab_html,start_num,end_num


view视图
from nbapp import page
def test(request):
    current_page_num = request.GET.get('page',1)
    per_page_counts = 10 #每页显示10条
    page_number = 5  #总共显示5个页码



    all_data = models.Customer.objects.all()
    total_count = all_data.count()

    ret_html,start_num,end_num = page.pagenation(request.path, current_page_num,total_count,per_page_counts,page_number)

    all_data = models.Customer.objects.all()[start_num:end_num]

    return render(request,'test.html',{'all_data':all_data,'ret_html':ret_html})


cbv view

form djaong.views i View 
class AddCustomer(View):
 	def get(self,request):

form .py

import re
from nbapp import models
from django import forms
from django.forms import widgets
from django.core.exceptions import ValidationError
class UserForm(forms.Form):
	usernaem password r_password

modelform把form相应的字段给继承了过来,不用一个个写了	username = forms.CharField()
pwd =.... 这些  modelForm把form的东西包装了   内部生成form标签内部前端传过来form标签 检验 

class CustomerModelForm(forms.ModelForm):
	class Meta: #根据这个表中的自动生成form	不用自己在写  继承了
		model = models.Customer
		fields = '__all__'
		 # exclude=['title',] #排除字段
		labels = {‘title’:'书名'}
	def clean_qq(self):
    	qq= self.cleaned_data.get('qq')
    	if '123' in qq:
    		raise ValidationError('QQ藜麦不能123')
    	else:
    		return qq 
    		
	def clean(self):	校验多个字段
    	password = 
    	r_password = self.clean_data.get('')
    if p!= r_p:
    	self.add_error('r','两次错误')
    		

xxx.py

import os

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "NBcrm.settings")
    import django
    django.setup()
    from nbapp import models
    import random
    l1 = []
    for i in range(1,101):
        obj = models.Customer(
            qq = ''.join([str(i) for i in random.choices(range(1,10),k=11)]),
            name = 'lihua'+ str(i),
            sex = random.choice(['male','female']),
            source = random.choice(['qq','referral','website']),
            course=random.choice(['LinuxL','PythonFullStack']),

        )
        l1.append(obj)
    models.Customer.objects.bulk_create(l1)

modelform生成多选框

page.py

#自定义分页

class PageNation:
    def __init__(self,base_url,current_page_num,total_counts,per_page_counts=10,page_number=5):
        '''
        :param base_url:   分页展示信息的基础路径
        :param current_page_num:  当前页页码
        :param total_counts:  总的数据量
        :param per_page_counts:  每页展示的数据量
        :param page_number:  显示页码数
        '''
        self.base_url = base_url
        self.current_page_num = current_page_num
        self.total_counts = total_counts
        self.per_page_counts = per_page_counts
        self.page_number = page_number
        try:
            self.current_page_num = int(self.current_page_num)

        except Exception:
            self.current_page_num = 1

        half_page_range = self.page_number // 2
        # 计算总页数
        self.page_number_count, a = divmod(self.total_counts, self.per_page_counts)
        if self.current_page_num < 1:
            self.current_page_num = 1

        if a:
            self.page_number_count += 1
        if self.current_page_num > self.page_number_count:
            self.current_page_num = self.page_number_count
        if self.page_number_count <= self.page_number:
            self.page_start = 1
            self.page_end = self.page_number_count
        else:
            if self.current_page_num <= half_page_range:
                self.page_start = 1
                self.page_end = page_number
            elif self.current_page_num + half_page_range >= self.page_number_count:
                self.page_start = self.page_number_count - self.page_number + 1
                self.page_end = self.page_number_count
            else:
                self.page_start = self.current_page_num - half_page_range
                self.page_end = self.current_page_num + half_page_range

    #数据切片依据,起始位置
    @property
    def start_num(self):
        start_num = (self.current_page_num - 1) * self.per_page_counts
        return start_num

    #数据切片依据,终止位置
    @property
    def end_num(self):
        end_num = self.current_page_num * self.per_page_counts
        return end_num

    # 拼接HTMl标签
    def page_html(self):
        tab_html = ''
        tab_html += '<nav aria-label="Page navigation"><ul class="pagination">'

        # 上一页
        if self.current_page_num == 1:
            previous_page = '<li disabled><a href="#" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></li>'
        else:
            previous_page = '<li><a href="{0}?page={1}" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></li>'.format(
                self.base_url, self.current_page_num - 1)
        tab_html += previous_page

        for i in range(self.page_start, self.page_end + 1):
            if self.current_page_num == i:

                one_tag = '<li class="active"><a href="{0}?page={1}">{1}</a></li>'.format(self.base_url, i)
            else:
                one_tag = '<li><a href="{0}?page={1}">{1}</a></li>'.format(self.base_url, i)
            tab_html += one_tag

        # 下一页
        if self.current_page_num == self.page_number_count:
            next_page = '<li disabled><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'
        else:
            next_page = '<li><a href="{0}?page={1}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'.format(self.base_url, self.current_page_num + 1)
        tab_html += next_page
        tab_html += '</ul></nav>'

        return tab_html


#函数low鸡版
def pagenation(base_url,current_page_num,total_counts,per_page_counts=10,page_number=5):
    '''
    total_counts数据总数
    per_page_counts每页分多少条数据
    page_number = 页码显示多少个
    current_page_num 当前页
    :return:
    '''
    # all_objs_list = models.Customer.objects.all()
    # total_counts = all_objs_list.count()
    # page_number = 5

    try:
        current_page_num = int(current_page_num)

    except Exception:
        current_page_num = 1


    half_page_range = page_number//2
    #计算总页数
    page_number_count,a = divmod(total_counts,per_page_counts)
    if current_page_num < 1:
        current_page_num = 1

    if a:
        page_number_count += 1
    if current_page_num > page_number_count:
        current_page_num = page_number_count

    start_num = (current_page_num - 1) * 10
    end_num = current_page_num * 10

    if page_number_count <= page_number:
        page_start = 1
        page_end = page_number_count
    else:
        if current_page_num <= half_page_range:
            page_start = 1
            page_end = page_number
        elif current_page_num + half_page_range  >= page_number_count:
            page_start = page_number_count - page_number + 1
            page_end = page_number_count
        else:
            page_start = current_page_num - half_page_range
            page_end = current_page_num + half_page_range

    #拼接HTMl标签
    tab_html = ''
    tab_html += '<nav aria-label="Page navigation"><ul class="pagination">'

    #上一页
    if current_page_num == 1:
        previous_page = '<li disabled><a href="#" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></li>'
    else:
        previous_page = '<li><a href="{0}?page={1}" aria-label="Previous" ><span aria-hidden="true">&laquo;</span></a></li>'.format(base_url,current_page_num-1)
    tab_html += previous_page

    for i in range(page_start,page_end+1):
        if current_page_num == i:

            one_tag = '<li class="active"><a href="{0}?page={1}">{1}</a></li>'.format(base_url,i)
        else:
            one_tag = '<li><a href="{0}?page={1}">{1}</a></li>'.format(base_url, i)
        tab_html += one_tag


    #下一页
    if current_page_num == page_number_count:
        next_page = '<li disabled><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'
    else:
        next_page = '<li><a href="{0}?page={1}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>'.format(base_url,current_page_num+1)
    tab_html+=next_page
    tab_html += '</ul></nav>'

    return tab_html,start_num,end_num

下午

models.Custome(request.post) 把form标签拿过来验证



mutiselect() 	djaong不做处理

modeform 里没写标签用的model里的vebname 

modeform 生成标签的时候

blank = True 和 null = True 

form浏览器只认blank   数据库认null

form_obj = form.CustomerModelform(instance= custome_obj) 老的数据 给了modelform

认证的时候 (两个参数)(re.PO,in=cu_ob)

不写验证是添加,没有instance时候
两个一样
action = '{{url 'customer' pk}}'    
action = '' 这个页面 

q查询高级玩法

q = Q()

q.children.append((condition,wd))

就把字符串变成了关键字 filter(q)

condition = condition += '__contains'

多条查询

q = Q() 
q.children.append((condition,wd)) 
q.children.append((‘qq_name__contains’,'小'))  添加了两条 默认是and的关系

若为or   指定条件连接符
再q.append之前添加  q.connector = 'or'

保存所有条件 搜索必备

1 加到标签里  init里传过来

2 params = request.GET.dict()
querydict     字典形式
params.urlencode() condition=qq & contain= 姓名


type(re.GET)  djaong.http.request.Q

查看  from dj.ht.re import Qu

deepcopy 可以修改  (request.GET)

为True

在page里
循环里重新赋值  每一次 self.params[''] = i
posted @ 2019-06-11 12:54  learnacode  阅读(193)  评论(0编辑  收藏  举报