# -*- coding: UTF-8 -*-
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse, HttpResponseRedirect
from django.template import loader, Context
from django.shortcuts import render_to_response
import time
import random
import string
import hashlib
import requests
# 导入缓存
from django.core.cache import cache
# 导入模型
from videoplay.models import Movie
from videoplay.models import User, UserComment, MoviePay
# 导入表单
from .forms import UserForm, UserCommentForm, MoviePayForm
class Sign:
''' 实例化初始值 '''
def __init__(self, appid, appsecret, url):
self.appid = appid
# self.access_token = self.get_access_token(appid, appsecret)
''' 缓存access_token '''
self.access_token = cache.get('access_token')
if self.access_token == None:
cache.set('access_token', self.get_access_token(appid, appsecret), 7050)
self.access_token = cache.get('access_token')
''' 缓存jsapi_ticket '''
self.jsapi_ticket = cache.get('jsapi_ticket')
if self.jsapi_ticket == None:
cache.set('jsapi_ticket', self.get_ticket(self.access_token), 7100)
self.jsapi_ticket = cache.get('jsapi_ticket')
self.ret = {
'nonceStr': self.__create_nonce_str(),
'jsapi_ticket': self.jsapi_ticket,
'timestamp': self.__create_timestamp(),
'url': url,
}
# 缓存signature
# self.signature = cache.get('signature')
# if self.signature == None:
# cache.set('signature', self.sign(), 7150)
# self.signature = cache.get('signature')
''' 获取随机字符串 '''
def __create_nonce_str(self):
return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(16))
''' 获取时间戳 '''
def __create_timestamp(self):
return int(time.time())
''' 获取access_token '''
def get_access_token(self, appid, appsecret):
url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={}&secret={}'.format(appid,appsecret)
r = requests.get(url)
data = r.json()
access_token = data.get('access_token')
return access_token
''' 获取jsapi_ticket '''
def get_ticket(self, access_token, type='jsapi'):
url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={}&type={}'.format(access_token, type)
r = requests.get(url)
data = r.json()
ticket = data.get('ticket')
return ticket
''' 获取signature '''
def sign(self):
string = '&'.join(['%s=%s' % (key.lower(), self.ret[key]) for key in sorted(self.ret)])
self.ret['signature'] = hashlib.sha1(string).hexdigest()
return self.ret
# return self.ret.get('signature')
""" 视频播放页面 """
def play(request, id):
# 通过 session 来获取传过来的数据 (用户名)
comment_username = request.session.get('comment_username')
if request.method == "POST":
print request.POST
if 'user_comment' in request.POST:
''' 用户评论 '''
# 绑定评论表单
uf_comment = UserCommentForm(request.POST)
# 校验提交数据是否合法
if uf_comment.is_valid():
# 如合法,获取数据并赋于变量
user_comment = uf_comment.cleaned_data.get('user_comment')
# 获取当前时间 (格式化)
comment_time = time.strftime('%Y/%m/%d | %H:%M:%S', time.localtime())
# 存入数据库
UserComment.objects.create(comment_username = comment_username, user_comment = user_comment, comment_time = comment_time)
print user_comment
print comment_time
# 获取当前除域名以外的请求路径
path = request.path
print path
''' 重定向到当前页面 '''
return HttpResponseRedirect(path)
elif 'movie_pay' in request.POST:
''' 电影支付 '''
movie_id = int(id)
# 绑定支付表单
uf_payment = MoviePayForm(request.POST)
# 校验提交数据是否合法
if uf_payment.is_valid():
# 获取支付数据
movie_pay = uf_payment.cleaned_data.get('movie_pay')
# 存入数据库
MoviePay.objects.create(pay_username = comment_username, movie_id = movie_id, movie_pay = movie_pay)
# 获取当前除域名以外的请求路径
path = request.path
''' 重定向到当前页面 '''
return HttpResponseRedirect(path)
''' 微信分享的 code '''
appid, appsecret = 'wx89d78fda8c962552', '41d433fe0e3194e1aff2d607c585be65'
# 动态获取当前的url
url = 'http://' + request.get_host() + request.get_full_path()
sign = Sign(appid, appsecret, url)
# 调用签名方法
sign.sign()
# 将获取到的字符串类型参数转换为 int
video_id = int(id)
# 获取(数据库)模型中对应电影的对象
video_source = Movie.objects.get(id = video_id)
# 获取数据库中所有的评论对象 | all() 和 filter()函数返回一个记录集 (列表)
comments_list = UserComment.objects.all()
# 获取数据库中已支付的对象
movie_payment_obj = MoviePay.objects.filter(pay_username = comment_username, movie_id = video_id)
# 支付 False:未购买 True: 已购买
pay = False
if video_id <= 5:
if len(movie_payment_obj) != 0:
pay = True
else:
pay = False
# 加载视频播放模板
t = loader.get_template("video.html")
c = Context({"user": sign, "video_source": video_source, "video_id": video_id,"movie_payment_obj": len(movie_payment_obj), "pay": pay, "url": url, "comments_list": comments_list})
return HttpResponse(t.render(c))
""" 用户注册 """
def regist(request):
if request.method == "POST":
# 绑定表单
uf_regist = UserForm(request.POST)
# 校验提交数据是否合法
if uf_regist.is_valid():
# 如合法,获取各自的数据并赋于变量
username = uf_regist.cleaned_data.get('username')
password = uf_regist.cleaned_data.get('password')
# 存入数据库
User.objects.create(username = username, password = password)
# 跳转到登录界面
return HttpResponseRedirect('/')
else:
return render(request, "user_regist.html", {"danger": True})
else:
uf_regist = UserForm()
# 加载用户注册模板
user_regist = loader.get_template("user_regist.html")
return HttpResponse(user_regist.render())
""" 用户登录 """
def login(request):
if request.method == 'POST':
# 绑定表单 | request.Post:获取表单提交的数据 (类字典对象)
uf_login = UserForm(request.POST)
# 校验提交数据是否合法
if uf_login.is_valid():
# 如合法后,获取各自的数据并赋于变量
username = uf_login.cleaned_data['username']
password = uf_login.cleaned_data['password']
''' 异常 用户名不存在 '''
try:
User.objects.get(username = username)
except User.DoesNotExist:
return render_to_response('user_login.html', {"userName_error": True})
# 获取数据库(模型)中对应的对象
user = User.objects.filter(username__exact = username, password__exact = password)
# 如果输入的对象匹配数据库中的对象为 True(存在数据库中)
if user:
# 创建 HTTpResponse 对象(跳转至 /movie 页面)
response = HttpResponseRed
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
人工智能-项目实践-html-Django 搭建的一个视频网站 网站相关技术: django 框架搭建整个网站 bootstrap 作为前端样式框架 使用微信 JS-SDK 开发工具包,对接微信分享API,使之视频播放页面支持微信分享 python 用于程序后台逻辑处理 使用 django 自带的数据库 Sqlite3 存储网站数据 Admin(后台管理): 用户名:root 密码:root
资源推荐
资源详情
资源评论
收起资源包目录
人工智能-项目实践-html-Django 搭建的一个视频网站.zip (184个子文件)
home_page.css 1KB
video_play.css 420B
user_regist.css 124B
user_login.css 118B
movieweb.db 47KB
new-blue.gif 1KB
hot-yellow.gif 559B
index.html 78KB
video.html 8KB
user_regist.html 2KB
user_login.html 2KB
pc_movie01.jpg 1.55MB
pc_movie02.jpg 750KB
XianXiaXueXuan.jpg 512KB
CiWeiXiaoZi.jpg 282KB
mobile.jpg 248KB
GongFuXiongMao3.jpg 116KB
BingHeShiDai4.jpg 115KB
03.jpg 49KB
05.jpg 45KB
02.jpg 45KB
06.jpg 45KB
05.jpg 44KB
15.jpg 44KB
15.jpg 44KB
06.jpg 43KB
06.jpg 42KB
02.jpg 42KB
12.jpg 42KB
04.jpg 41KB
01.jpg 40KB
11.jpg 40KB
16.jpg 40KB
15.jpg 40KB
08.jpg 40KB
13.jpg 40KB
19.jpg 40KB
12.jpg 40KB
05.jpg 40KB
18.jpg 40KB
02.jpg 40KB
16.jpg 40KB
07.jpg 40KB
07.jpg 40KB
02.jpg 39KB
02.jpg 39KB
11.jpg 39KB
11.jpg 39KB
09.jpg 39KB
16.jpg 38KB
12.jpg 37KB
12.jpg 37KB
03.jpg 37KB
03.jpg 37KB
10.jpg 37KB
09.jpg 37KB
15.jpg 37KB
01.jpg 37KB
09.jpg 37KB
03.jpg 37KB
09.jpg 36KB
09.jpg 36KB
10.jpg 36KB
10.jpg 36KB
02.jpg 36KB
01.jpg 35KB
01.jpg 35KB
01.jpg 35KB
11.jpg 35KB
17.jpg 35KB
03.jpg 35KB
14.jpg 35KB
11.jpg 35KB
03.jpg 35KB
08.jpg 35KB
14.jpg 35KB
10.jpg 34KB
16.jpg 34KB
02.jpg 34KB
10.jpg 34KB
13.jpg 34KB
20.jpg 34KB
10.jpg 34KB
04.jpg 33KB
14.jpg 33KB
01.jpg 33KB
04.jpg 32KB
04.jpg 32KB
03.jpg 32KB
13.jpg 32KB
06.jpg 32KB
16.jpg 32KB
15.jpg 31KB
05.jpg 31KB
05.jpg 31KB
01.jpg 31KB
06.jpg 30KB
06.jpg 30KB
14.jpg 29KB
14.jpg 29KB
共 184 条
- 1
- 2
资源评论
博士僧小星
- 粉丝: 1774
- 资源: 5875
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于MFC的校园导航程序(使用最短路径dijkstra算法).rar
- Android Studio android APP 视频作为视图背景需要源代码或想了解其实现原理的可以私心我
- com.ZeroneGames.GreenProject.apk
- Python自动化开发入门教程
- 4399GameSem_116_13955_207551_6.apk
- python 3.9.19源码编译包
- php-8.2.18-Win32-vs16-x64.rar
- 字节跳动青训营-抖音项目
- SQL资料手册,语句教程,高级查询语句语法
- 上位机和串口建立 Modbus 协议进行数据传输,并使用 Mysql 数据库存储,能够实现实时温湿度显示和动态变化曲线,历史数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功