**View配置示例**
~~~
# _*_ coding:utf-8 _*_
from django.shortcuts import render, get_object_or_404 #get_object_or_404避免請求函數錯誤
from .models import Blogs #引入app models
# Create your views here.
def blog_title(request):#request 負責接收請求
blogs = Blogs.objects.all()
#return 結束當前參數。render()的作用是將數據渲染到指定模版上,blogs":blogs 第一個blogs,為指定頁面接收參數
return render(request, 'blog/titles.html', {"blogs":blogs})
def blog_article(request, article_id):
# article_id是(titles.html文件blog.id參數傳入接收變量),id為Blogs數據表
#article = Blogs.objects.get(id=article_id)
article = get_object_or_404(Blogs, id=article_id)
pub = article.publish
#article、publishe為渲染到content.html變量名
return render(request, 'blog/content.html', {"article":article, "publishe":pub})
~~~
**View配置擴展**
1、增加點擊次數
~~~
def BlogsView(request, pk):
blogs = get_object_or_404(Blog, pk=pk)
#增加點擊次數 blogs.click
blogs.click += 1
#save()保存致數據庫
blogs.save()保存致數據庫
return render(request,"blog1.html", {
"blogs":blogs
})
~~~
2、用戶登錄、注冊、判斷
~~~
# _*_ coding:utf-8 _*_
from django.shortcuts import render, redirect
#引入系統模塊
from django.http import HttpResponse
#引入內置用戶登錄管理
from django.contrib.auth import authenticate, login
#引入內置用戶數據
from django.contrib.auth.models import User
#引入forms類
from .forms import LoginFrom, RegisterFrom, UserInfoForm
#引入models
from .models import UserInfo
#新增用戶信息,required引入裝飾器,判斷用戶登錄,如果沒有登錄跳轉其他頁面
from django.contrib.auth.decorators import login_required
# Create your views here.
#用戶登錄
def user_login(request):
#method是HttpRequest對象的一個常用屬性,可返回POST、GET
if request.method == "POST":
login_form = LoginFrom(request.POST)
#is_valid驗證傳入數據是否合法性
if login_form.is_valid():
#cleaned_data引用一個字典類型數據
cd = login_form.cleaned_data
#authenticate檢驗數據庫帳號密碼是否正確
user = authenticate(username=cd['username'], password=cd['password'])
#login引入的login()函數,已語句user實例對象作為參數,實現用戶登錄,登錄后調用session
if user:
#判斷正確返回HttpResponse
login(request, user)
#redirect跳轉
return redirect("login:me")
#return HttpResponse("歡迎您的到來")
else:
return HttpResponse("帳號密碼錯誤")
else:
return HttpResponse("帳號密碼錯誤")
if request.method == "GET":
login_form = LoginFrom()
return render(request, "users/login.html", {"form": login_form})
#用戶注冊
def register(request):
if request.method == "POST":
user_form = RegisterFrom(request.POST)
#新增字段
userprofile_form = UserInfoForm(request.POST)
#新增*userprofile_form.is_valid()驗證數據
if user_form.is_valid()*userprofile_form.is_valid():
new_user = user_form.save(commit=False)
new_user.set_password(user_form.cleaned_data['password'])
new_user.save()
#新增字段
new_profile = userprofile_form.save(commit=False)
new_profile.user = new_user
new_profile.save()
return redirect("login:user_login")
#return HttpResponse("successfully")
else:
return HttpResponse("密碼設置錯誤,請重新注冊。")
else:
user_form = RegisterFrom()
return render(request, "users/register.html", {"form": user_form, "profile": UserInfoForm})
#用戶如果沒有登錄跳轉至登錄頁面
@login_required(login_url='login:user_login')
#用戶信息
def myself(request):
user = User.objects.get(username=request.user.username)
userinfo = UserInfo.objects.get(user=user)
return render(request, "users/me.html", {"user": user, "userinfo": userinfo})
~~~
3、數據篩選.objects.all().order_by、objects.filter
~~~
# _*_ coding:utf-8 _*_
from django.shortcuts import render, get_object_or_404
from .models import fengg, qyfl, qy, sx, chanpin
# Create your views here.
#導航
def Fengg(request):
chanpinx = chanpin.objects.all().order_by('-id')
fenggx = fengg.objects.all()
qyx = qy.objects.all()
sxx = sx.objects.all()
return render(request, 'best1/best.html', {"chanpinx": chanpinx, "fenggx": fenggx, "qyx": qyx, "sxx": sxx})
#風格分類
def chanpin_names(request, pk):
#pk傳入fengg數據
cate = get_object_or_404(fengg, pk=pk)
#fengg 為chanpin數據表ForeignKey所對應數據
#filter 篩選數據
post_list = qyfl.objects.filter(title=cate)
#導航分類
fenggx = fengg.objects.all()
qyx = qy.objects.all()
sxx = sx.objects.all()
return render(request, 'best1/cp.html', {"post_list": post_list, "fenggx": fenggx, "qyx": qyx, "sxx": sxx})
~~~
titles.html樣板
~~~
{#繼承base.html文件#}
{% extends "base.html" %}
{% block title %}文章頁面{% endblock %}
{% block content %}
{% for blog in blogs %}
{# blog變量#}
{# blogs為views.py文件傳入參數blogs#}
<li><a href="{{ blog.id }}">{{ blog.title }}</a></li>
{% endfor %}
{% endblock %}
~~~
content.html樣板
~~~
{#繼承base.html文件#}
{% extends "base.html" %}
{% block title %}文章第二頁面{% endblock %}
{% block content %}
{#article、publishe是views傳入變量名參數,title、author、body是models數據表,username是User內置數據表#}
<h1>{{ article.title }}</h1>
{{ article.author.username }}
{{ publishe }}
{{ article.body }}
{% endblock %}
~~~