生活随笔
收集整理的這篇文章主要介紹了
Django基础(四)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
分頁器
?
#views.py
from django.core.paginator
import Paginator, EmptyPage, PageNotAnIntegerdef add(request):Booklist=
[]for i
in range(100
):book_obj=models.Book(name=
"book"+str(i),price=60+i*
i)boklist.append(book_obj)models.Book.objects.bulk_create(Booklist)return HttpRenponse(
"OK")def index(request):book_list=
models.Book.objects.all()paginator=Paginator(book_list,8)
# 8 是每頁的記錄數(shù)'''print(paginator.count) # 總的數(shù)據(jù) 100print(paginator.num_pages) # 總的頁數(shù) 13print(paginator.page_range) # 頁數(shù)范圍 range(1,14)'''page_range =
paginator.page_range try:num = int(request.GET.get(
"p",1
))page =
paginator.page(num) except Exception as e:page = paginator.page(1
)'''print(page.next_page_number())print(page.previous_page_number())print(page.has_next())print(page.has_previous())'''return render(request,
"index.html",{
"page":page,
"page_range":page_range,
"num":num})
?
#index.html
<html>
<head><script src=
"https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script><link rel=
"stylesheet" href=
"/static/dist/css/bootstrap.css">
</head>
<style></style>
<body>
<ul>
{%
for i
in page %
}<li>{{ i.name }}</li>
{% endfor %
}
</ul><nav aria-label=
"Page navigation"><ul
class=
"pagination">
{%
if page.has_previous %
}<li><a href=
"/?p={{ page.previous_page_number }}">上一頁</a></li>
{%
else %
}<li
class=
"disabled"><a href=
"#">上一頁</a></li>
{% endif %
}{%
for i
in page_range %
}{%
if i==num %
}<li
class=
"active"><a href=
"/?p={{ i }}">{{ i }}</a></li>
{%
else %
}<li><a href=
"/?p={{ i }}">{{ i }}</a></li>
{% endif %
}{% endfor %
}{%
if page.has_next %
}<li><a href=
"/?p={{ page.next_page_number }}">下一頁</a></li>
{%
else %
}<li
class=
"disabled"><a href=
"#">下一頁</a></li>
{% endif %
} </ul>
</nav>
</body>
</html>
?
自定義分頁器
Cookie &?Session
?
cooike是保留在客戶端(瀏覽器)的婦女放鍵值對的容器
session是保留在服務(wù)器上的容器 {}
#models.py
class UserInfo(models.Model):name=models.CharField(max_length=32
)pwd=models.CharField(max_length=32)
#urls.py
url(r
'^login/',views.login)
url(r'^index/',views.index)
url(r'^logout/',views.log_out)
url(r'^addBook/',views.addBook)
#views.py
from app01
import models
def login(request):if request.method==
'POST':username=request.POST.get(
'name')password=request.POST.get(
'pwd')ret=models.UserInfo.objects.filter(name=username,pwd=
password)if ret:request.session['is_login']=
Truerequest.session['username']=
usernamereturn redirect(
'/index/')else:return redirect(
'/login/')return render(request,
'login.html')def index(request):if not request.session.get(
'is_login'):return redirect(
'/login/')name=request.session.get(
'uername')return render(request,
'index.html',{
"name":name})def addBook(request):return render(request,
'addBook.html')def log_out(request);request.session.flush()return redirect(
"/login/")
#login.html
<form action=
'/login/' method=
'post'>
{% csrf_token %
}<p>姓名<input type=
'text' name=
'user'></p><p>密碼<input type=
'pwd' name=
'pwd'></p><input type=
'submit'>
</form>
#index.html<h3>welcome {{ name }}</h3>
<a href=
"/logout/">注銷</a>
#addBook.html<form action=
'/login/' method=
'post'>
{% csrf_token %
}<p>書名<input type=
'text' name=
'user'></p><p>價(jià)格<input type=
'pwd' name=
'pwd'></p><input type=
'submit'>
</form>
auth認(rèn)證模塊
不用這個(gè)模塊,用session和cooike也可以
只是這個(gè)模塊更加簡單
#urls.py
url(r
'^login',views.login)
url(r'^index',views.index)
url(r'^logout',views.log_out)
url(r'^reg',views.reg)
#views.py
from django.contrib
import auth
from django.contrib.auth.models
import Userdef login(request):if request.method ==
"POST":username=request.POST.get(
'user')password=request.POST.get(
'pwd')user=auth.authenticate(username=username,password=
password)if user:auth.login(request,user)return redirect(
'/index/')else:return redirect(
'/login/')return render(request,
"login.html")def index(request):if not request.user.is_authenticated():return redirect(
'/login/')return render(request,
'index.html')def log_out(request):auth.logout(request)return redirect(
'/login/')def reg(request):if request.method==
"POST":user=request.POST.get(
'user')pwd=request.POST.get(
'pwd')User.objects.create_user(username=user,password=
pwd)return redirect(
'/login/')return render(request,
"reg.html")
#login.html
<form action=
'/login/' method=
'post'>
{% csrf_token %
}<p>姓名<input type=
'text' name=
'user'></p><p>密碼<input type=
'pwd' name=
'pwd'></p><input type=
'submit'>
</form>
#index.html
<li><a href=
"#">welcome {{ request.user }}</a></li>
<li><a href=
"/logout/">注銷</a></li>
#reg.html
<h3>注冊</h3>
<form action=
'/reg/' method=
'post'>
{% csrf_token %
}<p>姓名<input type=
'text' name=
'user'></p><p>密碼<input type=
'pwd' name=
'pwd'></p><input type=
'submit'><a href=
'/reg/'><input type=
'button' value=
'注冊'></a>
</form>
Django-Ajax
序列化操作:
1.JSON.parse() # 將一個(gè)Json字符串轉(zhuǎn)換為js對象
2.JSON.stringify() # 將js轉(zhuǎn)換為json字符串
AJAX:
1.異步
2.局部刷新
#urls.py
url(r
'^index/',views.index)
url(r'^send_ajax/',views.send_ajax)
url(r'^cal/',views.cal)
url(r'^login/',views.login)
#views.py
def index(request):return render(request,
'index.html')def send_ajax(request):return HttpResponse(
"OK")def cal(request):num1=request.GET.get(
"num1")num2=request.GET.get(
"num2")ret=int(num1)+
int(num2)return HttpResponse(ret)def login(request):user=request.POST.get(
"user")pwd=request.POST.get(
"pwd")loginResponse={
"user":None,
"errorMsg":None}if user==
"tom" and pwd==
"123":loginResponse["user"]=
"tom"else:loginResponse["errorMsg"]=
"用戶名或密碼錯(cuò)誤"import jsonreturn HttpResponse(json.dumps(loginResponse))
#index.html
<html>
<head><script src=
"https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
</head>
<body>
<button>ajaxSend</button><span
class=
'error'></span>
{% csrf_token %
}
<p><input type=
"text" class=
"num1">+<input type=
"text" class=
"num2">=<input type=
"text" class=
"ret"><button
class=
"cal">計(jì)算</button></p>
<form action=
""><p>姓名 <input type=
"text" class=
"user"></p><p>密碼 <input type=
"password" class=
"pwd"></p><input type=
"button" value=
"submit" class=
"loginBtn"><span
class=
"login_error"></span>
</form>
<script>//
ajax實(shí)現(xiàn)$('button').click(function(){$.ajax({url:"/send_ajax/",type:"get",success:function(data){$(".error").html(data)}})});//
ajax計(jì)算$(".cal").click(function(){var num1=$(
".num1").val();var num2=$(
".num2").val();$.ajax(function(){url:"/cal/",type:"post",data:{"num1":num1,"num2":num2,csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()},success:function(data){$(".ret").val(data)}})});//
ajax登陸$(".loginBtn").click(function(){$.ajax(function(){url:"/login/",type:"POST",data:{user:$(".user").val(),pwd:$(".pwd").val(),csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()},success:function(data){console.log(typeof data); //
stringvar data=
JSON.parse(data); console.log(typeof data); //
objectif(data[
"user"]){location.href=
"/index/" //
成功后跳轉(zhuǎn)}else{var error_msg=data[
"error_Msg"];$(".login_error").html(error_msg).css(
"color",
"red");setTimeout(function(){$(".login_error").html(
"") //
3s后清空文本},3000
)}}})});
</script>
</body>
</html>
?
轉(zhuǎn)載于:https://www.cnblogs.com/Ryans-World/p/7883255.html
總結(jié)
以上是生活随笔為你收集整理的Django基础(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。