外貿(mào)門戶網(wǎng)站如何創(chuàng)建自己的域名
批量插入數(shù)據(jù)
【1】準備數(shù)據(jù)
class Book(models.Model):title = models.CharField(max_length=32)
【2】一條一條插入
- 后端
def ab_many(request):# (1)先給Book表插入一萬條數(shù)據(jù)for i in range(1000):models.Book.objects.create(title=f'第{i}本書')# (2)將所有數(shù)據(jù)查詢到并展示給前端頁面book_queryset = models.Book.objects.all()return render(request, 'ab_many.html', locals())
- 前端
{% for book_obj in book_queryset %}<p>{{ book_obj.title }}</p>
{% endfor %}
效果就是,有一種網(wǎng)絡很高的感覺,頁面一直在轉圈圈
【3】優(yōu)化-批量插入
def ab_many(request):# 批量插入boo_list = []for i in range(1000):book_obj = models.Book.objects.create(title=f'第{i}本書')boo_list.append(book_obj)models.Book.objects.bulk_create(boo_list)return render(request, 'ab_many.html', locals())
- 當我們想向數(shù)據(jù)庫批量插入數(shù)據(jù)的時候,使用ORM提供的bulk_create方法能夠大大的減少操作的時間
分頁的原理及推導
當查詢的數(shù)據(jù)太多的時候,一頁展示不完,分頁碼展示"""
總數(shù)據(jù) 每頁展示 總頁數(shù)
100 10 10
101 10 11
99 10 10
怎么計算出來總頁數(shù)
總數(shù)據(jù) / 每頁展示 = 總頁數(shù)有余數(shù)+1
沒有余數(shù)=商
"""
divmod
分頁類
class Pagination(object):def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):"""封裝分頁相關數(shù)據(jù):param current_page: 當前頁:param all_count: 數(shù)據(jù)庫中的數(shù)據(jù)總條數(shù):param per_page_num: 每頁顯示的數(shù)據(jù)條數(shù):param pager_count: 最多顯示的頁碼個數(shù)"""try:current_page = int(current_page)except Exception as e:current_page = 1if current_page < 1:current_page = 1self.current_page = current_pageself.all_count = all_countself.per_page_num = per_page_num# 總頁碼all_pager, tmp = divmod(all_count, per_page_num)if tmp:all_pager += 1self.all_pager = all_pagerself.pager_count = pager_countself.pager_count_half = int((pager_count - 1) / 2)@propertydef start(self):return (self.current_page - 1) * self.per_page_num@propertydef end(self):return self.current_page * self.per_page_num@propertydef page_html(self):# 如果總頁碼 < 11個:if self.all_pager <= self.pager_count:pager_start = 1pager_end = self.all_pager + 1# 總頁碼 > 11else:# 當前頁如果<=頁面上最多顯示11/2個頁碼if self.current_page <= self.pager_count_half:pager_start = 1pager_end = self.pager_count + 1# 當前頁大于5else:# 頁碼翻到最后if (self.current_page + self.pager_count_half) > self.all_pager:pager_end = self.all_pager + 1pager_start = self.all_pager - self.pager_count + 1else:pager_start = self.current_page - self.pager_count_halfpager_end = self.current_page + self.pager_count_half + 1page_html_list = []# 添加前面的nav和ul標簽page_html_list.append('''<nav aria-label='Page navigation>'<ul class='pagination'>''')first_page = '<li><a href="?page=%s">首頁</a></li>' % (1)page_html_list.append(first_page)if self.current_page <= 1:prev_page = '<li class="disabled"><a href="#">上一頁</a></li>'else:prev_page = '<li><a href="?page=%s">上一頁</a></li>' % (self.current_page - 1,)page_html_list.append(prev_page)for i in range(pager_start, pager_end):if i == self.current_page:temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)else:temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)page_html_list.append(temp)if self.current_page >= self.all_pager:next_page = '<li class="disabled"><a href="#">下一頁</a></li>'else:next_page = '<li><a href="?page=%s">下一頁</a></li>' % (self.current_page + 1,)page_html_list.append(next_page)last_page = '<li><a href="?page=%s">尾頁</a></li>' % (self.all_pager,)page_html_list.append(last_page)# 尾部添加標簽page_html_list.append('''</nav></ul>''')return ''.join(page_html_list)