M
投票的数据结构设计
from django.db import models
from faker import Factory
from django.contrib.auth.models import User
# Create your models here.
class Video(models.Model):
title = models.CharField(null=True, blank=True, max_length=300)
content = models.TextField(null=True, blank=True)
url_image = models.URLField(null=True, blank=True)
cover = models.FileField(upload_to='cover_image', null=True)
editors_choice = models.BooleanField(default=False)
def __str__(self):
return self.title
class UserProfile(models.Model):
belong_to = models.OneToOneField(to=User, related_name='profile')
profile_image = models.FileField(upload_to='profile_image')
class Ticket(models.Model):
voter = models.ForeignKey(to=UserProfile, related_name='voted_tickets')
video = models.ForeignKey(to=Video, related_name='tickets')
VOTE_CHOICES = {
('like', 'like'),
('dislike', 'dislike'),
('normal', 'normal'),
}
choice = models.CharField(choices=VOTE_CHOICES, max_length=10)
def __str__(self):
return str(self.id)
# f = open('/Users/Hou/Desktop/web_url.txt','r')
# for url in f.readlines():
# v = Video(
# title=fake.text(max_nb_chars=90),
# content=fake.text(max_nb_chars=3000),
# url_image=url,
# editors_choice=fake.pybool()
# )
# v.save()
在admin.py上注册模型
from django.contrib import admin
from website.models import Video, UserProfile, Ticket
# Register your models here.
admin.site.register(Video)
admin.site.register(UserProfile)
admin.site.register(Ticket)
MM
V
页面结果的逻辑显示(按钮显示逻辑和喜欢人数统计逻辑)
from django.shortcuts import render, Http404, HttpResponse, redirect
from website.models import Video, Ticket
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib.auth import authenticate, login
from website.form import LoginForm
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.core.exceptions import ObjectDoesNotExist
# Create your views here.
def listing(request, cate=None):
context = {}
if cate is None:
vids_list = Video.objects.all()
if cate == 'editors':
vids_list = Video.objects.filter(editors_choice=True)
else:
vids_list = Video.objects.all()
page_robot = Paginator(vids_list, 9)
page_num = request.GET.get('page')
try:
vids_list = page_robot.page(page_num)
except EmptyPage:
vids_list = page_robot.page(page_robot.num_pages)
#raise Http404('EmptyPage')
except PageNotAnInteger:
vids_list = page_robot.page(1)
context['vids_list'] = vids_list
return render(request, 'listing.html', context)
def index_login(request):
context = {}
if request.method == "GET":
form = AuthenticationForm
if request.method == "POST":
form = AuthenticationForm(data=request.POST)
if form.is_valid():
login(request, form.get_user())
return redirect(to='list')
context['form'] = form
return render(request, 'register_login.html', context)
def index_register(request):
context = {}
if request.method == 'GET':
form = UserCreationForm
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect(to='login')
context['form'] = form
return render(request, 'register_login.html', context)
def