日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

django session, 分页,数据库学习

發布時間:2025/6/15 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django session, 分页,数据库学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、http請求周期 瀏覽器(socket客戶端):2.socket.connect(ip,端口)3.socket.send("規則:?http協議GET請求:"GET??/index.html?k1=1&k2=2??Http/1.1\r\nhost:www.xiaohuar.com\r\ncontent-type:?application/json\r\n\r\n"請求頭和請求體使用\r\n\r\n分割,?前面是請求頭,后面是請求提POST請求:"POST??/index.html?k1=1&k2=2??Http/1.1\r\nhost:www.xiaohuar.com\r\ncontent-type:?application/json\r\n\r\nusername=alex&pwd=123"請求頭和請求體使用\r\n\r\n分割,前面是請求頭,后面是請求體6.獲取響應響應頭,響應體?=?data.split('\r\n\r\n')7.斷開連接web端:1.服務端運行:?ip,端口4.字符串?=?server.recv()頭,體?=?data.split("\r\n\r\n")5.服務端響應.conn.send('......')響應頭:響應體:7.斷開連接總結:a.Http請求中本質都是字符串b.Http請求短鏈接(請求,響應斷開連接)c.請求和響應都有:?頭、體請求:請求頭\r\n\r\n請求體響應:響應頭\r\n\r\n響應體<html>....</html>二、django框架Django本質:socket(wsgiref)解析和封裝http請求(*)視圖函數:def?index(request):request.GETrequest.body?#獲取原生的請求體request.POST?#如果請求頭中:?content-type:?urlencode-form...才將request.body轉化成字典可能有值,可能沒值request.methodrequest.Metarequest.GET.get()request.GET.getlist()request.POST.get()request.POST.getlist()return?HttpResponse('字符串/字節')return?render(request,"html路徑",?{})return?redirect('URL')三、cookie和sessioncookie是客戶端瀏覽器請求服務端登錄時,服務端生成的一段鍵值對攜帶在響應頭中,下 次客戶端請求時,服務端會先驗證cookie是否存在,存在則不需要重新登錄,否則要從新登錄session是客戶端登錄服務端時,驗證通過后會隨機生成一段字符串作為key存放在django.session表中, 值是也是一個字典,是程序設定的一些用戶信息,同時響應頭會攜帶這個key返回給客戶端,這樣會更加 安全。session認證登錄退出流程: def?auth(func):def?inner(request,*args,**kwargs):ck?=?request.session.get('uuuuuuuu')if?not?ck:return?redirect('/login.html')return?func(request,?*args,?**kwargs)return?inner@auth def?index(request):user?=?request.session.get('uuuuuuuu')return?render(request,'index.html',{'user':?user})def?login(request):if?request.method?==?"GET":return?render(request,'login.html')else:user?=?request.POST.get('user')pwd?=?request.POST.get('pwd')pwd?=?encrypt(pwd)obj?=?models.userInfo.objects.filter(username=user,password=pwd).first()if?obj:request.session['uuuuuuuu']?=?user?#存放在django.session中這個用戶key對應的字典值中request.session.set_expiry(5)return?redirect('/index.html')else:return?render(request,'login.html',{'msg':'用戶名或密碼錯誤'})def?logout(request):request.session.clear()return?redirect('/login.html')session有關配置(settings.py配置文件) #?SESSION_ENGINE?=?'django.contrib.sessions.backends.db'??#?引擎(默認) # #?SESSION_COOKIE_NAME?=?"sessionid"??#?Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串(默認) #?SESSION_COOKIE_PATH?=?"/"??#?Session的cookie保存的路徑(默認) #?SESSION_COOKIE_DOMAIN?=?None??#?Session的cookie保存的域名(默認) #?SESSION_COOKIE_SECURE?=?False??#?是否Https傳輸cookie(默認) #?SESSION_COOKIE_HTTPONLY?=?True??#?是否Session的cookie只支持http傳輸(默認) #?SESSION_COOKIE_AGE?=?1209600??#?Session的cookie失效日期(2周)(默認) #?SESSION_EXPIRE_AT_BROWSER_CLOSE?=?False??#?是否關閉瀏覽器使得Session過期(默認) #?SESSION_SAVE_EVERY_REQUEST?=?True??#?是否每次請求都保存Session,默認修改之后才保存(默認)四、csrf_token跨站請求偽造,post提交數據為避免其他網站通過用戶session信息獲取信息,需要使用{%?csrf_token?%},在ajax提交時,可以使用以下方式:$.ajax({url:"/icbc.html",type:"POST",data:?{'k1':'v1','k2':'v2','csrfmiddlewaretoken':"{{?csrf_token?}}"},success:function(arg){console.log(arg)}})五、分頁urls.py from?app01?import?views urlpatterns?=?[url(r'^admin/',?admin.site.urls),url(r'hosts.html$',?views.hosts), ]views.py from?django.shortcuts?import?render,redirect,HttpResponse from?app01?import?models #?Create?your?views?here. from?utils.pagination?import?Pagedef?hosts(request):current_page?=?int(request.GET.get('page'))all_count?=?models.Host.objects.all().count()page_obj?=?Page(current_page,all_count,request.path_info)host_list?=?models.Host.objects.all()[page_obj.start:page_obj.end]page_str?=?page_obj.page_html()return?render(request,'hosts.html',{'host_list':host_list,'page_str':page_str})models.py????#數據庫自己填充足夠數據測試 from?django.db?import?models#?Create?your?models?here. class?Host(models.Model):hostname?=?models.CharField(max_length=32)port?=?models.CharField(max_length=10)分頁模塊 pagination.py class?Page:def?__init__(self,current_page,?all_count,?base_url,per_page=10,?pager_page_count=11):""":param?current_page:?當前頁碼:param?all_count:?總數據條數:param?base_url::param?per_page:?每頁顯示數據條數:param?pager_page_count:?頁面顯示頁碼數"""self.base_url?=?base_urlself.current_page?=?current_pageself.per_page?=?per_pageself.pager_page_count?=?pager_page_countpager_count,?b?=?divmod(all_count,per_page)?#pager_count總頁碼數if?b?!=?0:pager_count?+=?1self.pager_count?=?pager_counthalf_pager_page_count?=?int(pager_page_count?/?2)self.half_pager_page_count?=?half_pager_page_count@propertydef?start(self):"""數據獲取值起始索引:return:"""return?(self.current_page?-?1)?*?self.per_page@propertydef?end(self):"""數據獲取值結束索引:return:"""return?self.current_page?*?self.per_pagedef?page_html(self):"""生成html頁面"""#如果數據總頁碼pager_count<11?pager_page_countif?self.pager_count?<?self.pager_page_count:pager_start?=?1pager_end?=?self.pager_countelse:#?數據頁碼已經超過11#?判斷:?如果當前頁?<=5?half_pager_page_countif?self.current_page?<=?self.half_pager_page_count:pager_start?=?1pager_end?=?self.pager_page_countelse:#?如果:?當前頁碼+5?>?總頁碼if?(self.current_page?+?self.half_pager_page_count)?>?self.pager_count:pager_end?=?self.pager_countpager_start?=?self.pager_count?-?self.pager_page_count?+?1else:pager_start?=?self.current_page?-?self.half_pager_page_countpager_end?=?self.current_page?+?self.half_pager_page_countpage_list?=?[]if?self.current_page?<=?1:prev?=?'<a?href="#">上一頁</a>'else:prev?=?'<a?href="%s?page=%s">上一頁</a>'?%?(self.base_url,self.current_page-1,)page_list.append(prev)for?i?in?range(pager_start,?pager_end?+?1):if?self.current_page?==?i:tpl?=?'<a?class="active"?href="%s?page=%s">%s</a>'?%?(self.base_url,?i,?i,)else:tpl?=?'<a?href="%s?page=%s">%s</a>'?%?(self.base_url,i,i,)page_list.append(tpl)if?self.current_page?>=?self.pager_count:nex?=?'<a?href="#">下一頁</a>'else:nex?=?'<a?href="%s?page=%s">下一頁</a>'?%?(self.base_url,self.current_page+1,)page_list.append(nex)page_str?=?"".join(page_list)return?page_str測試頁面hosts.html <!DOCTYPE?html> <html?lang="en"> <head><meta?charset="UTF-8"><title>Title</title><style>.pagination1?a{display:?inline-block;padding:?5px?8px;background-color:?darkslateblue;margin:?5px;color:?white;}.pagination1?a.active{background-color:?green;}</style> </head> <body><h1>主機列表</h1><table?border="1"><thread><tr><th>ID</th><th>主機名</th><th>端口</th></tr></thread><tbody>{%?for?row?in?host_list?%}<tr><td>{{?row.id?}}</td><td>{{?row.hostname?}}</td><td>{{?row.port?}}</td></tr>{%?endfor?%}</tbody></table><div?class="pagination1">{{?page_str|safe?}}</div> </body> </html>


轉載于:https://blog.51cto.com/haoyonghui/1962423

總結

以上是生活随笔為你收集整理的django session, 分页,数据库学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。