使用Django框架实现游戏站点搭建
完整project链接点击打开链接
上一篇中我们使用了Javascript和Html5实现了弹球游戏。而在本文中我们希望以其为基础实现游戏站点,可以实现用户的注冊登录。游戏成绩记录,排名显示。微博分享等功能。
终于效果:
2. 站点的搭建和server的搭建
2.1 站点总体构成
站点的搭建我使用django框架。
2.1.1 数据库设计
User:
|
Field |
Type |
Null |
Key |
Default |
Description |
|
Name |
Varchar(50) |
No |
Primary |
用户ID |
|
|
Password |
Varchar(50) |
No |
用户password |
||
|
BestScore |
Integer |
No |
0 |
用户最高分 |
|
|
Name |
Varchar(20) |
No |
法人姓名 |
相应的Models;
class Player(models.Model):
name = models.CharField(max_length=50, primary_key =True)
password = models.CharField(max_length=50)
bestScore = models.PositiveIntegerField()
def __unicode__(self):
return u'%s %s %s %s %s' % (self.name, self.password, self.weibo, self.weboPw, self.bestScore)
2.1.2 站点设计
站点架构图:
URL设置
(r'^$', views.login),
(r'^index/$', views.index),
(r'^ballgame/$', views.game),
(r'^signup/$', views.signup),
(r'^signresult/$', views.signResult),
(r'^login/$', views.loginResult),
(r'^storeScore/(?P<score>[\d]*)/$', views.storeScore),
(r'^logout/$', views.logout),
(r'^site_media/(?P<path>.*)$','django.views.static.serve',{'document_root': settings.STATIC_PATH}),
相应的Views:
要点:登录控制,登录之后向request中写入session表示已经登录,在受到每一个URL请求时在views中进行推断。假设session中没有这个信息,就返回登录页面。登出则是在request中删除这个session信息。
//登录结果
def loginResult(request):
if request.method == "POST":
username = request.POST["username"]
try:
user = Player.objects.get(name = username)
except ObjectDoesNotExist:
return render_to_response("login.html")
passwd = request.POST["password"]
if passwd != user.password:
return HttpResponseRedirect("/") request.session['user_id'] = user.name;
return HttpResponseRedirect("/index/")
//登录页
def login(request):
if "user_id" in request.session:
return HttpResponseRedirect("/index/")
else:
return render_to_response('login.html')
//注冊页
def signup(request):
return render_to_response('signup.html')
//登出
def logout(request):
try:
del request.session['user_id'] except KeyError:
pass
return render_to_response('login.html')
//index页
def index(request):
//使用request中的session控制登录
if "user_id" in request.session:
res = Player.objects.order_by('-bestScore')[0:9]
user = Player.objects.get(name=request.session["user_id"])
score = user.bestScore
count = 1
ares = Player.objects.order_by('-bestScore')
for p in ares:
if p.name==request.session["user_id"]:
break
else:
count= count+1 return render_to_response('index.html', {"username": request.session["user_id"], "bestPlayer": res, "score": score, "rank": count})
else:
return render_to_response('login.html')
//游戏页
def game(request):
if "user_id" in request.session:
return render_to_response('ballGame.html', {"username": request.session["user_id"]})
else:
return HttpResponseRedirect("")
//注冊结果页
def signResult(request):
if request.method == "POST":
username = request.POST["username"]
try:
existed = Player.objects.get(name = username)
except ObjectDoesNotExist:
passwd = request.POST["password"]
p = Player(name = username, password= passwd, bestScore=1)
p.save()
return render_to_response("signSucceed.html")
return HttpResponseRedirect("/signup/")
//保存得分
def storeScore(request,score):
if 'user_id' in request.session:
userid = request.session['user_id']
try:
user = Player.objects.get(name=userid)
except ObjectDoesNotExist:
return HttpResponseRedirect("")
oldScore = user.bestScore;
print type(oldScore)
print type(score)
score = long(score)
if score > oldScore:
print "yes"
bestScore = score
user.bestScore = score
user.save()
else:
bestScore = oldScore return render_to_response("score.html",{"username":user.name, "thisscore":score, "bestScore": bestScore})
else:
return HttpResponseRedirect("")
2.1.3 server的搭建
本站点选择使用Apacheserver,apacheserver默认不支持python。所以须要载入外部模块。这里选择使用module_wsgi。
配置步骤:
A.从站点上下载编译好的module_wsgi.so,放置到apache安装文件夹/modules文件夹。
在apache安装文件夹/conf/httpd.conf文件里加入下面内容已加载该模块。
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias / "F:/danjo/game/django.wsgi" //设置/url相应文件。 Alias /site_media F:/danjo/game/static //设置/site_media url 所相应文件夹。本站点将全部的静态载入内容放在了该文件夹。 <Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from allow此处为设置对/根文件夹的訪问权限
</Directory> <Directory "F:/danjo/game"> //该文件夹为djangoproject所在文件夹
Order deny,allow
allow from all
</Directory>
在djangoproject文件夹中加入文件。Django.wsgi。
import os
import sys
import django.core.handlers.wsgi
sys.path.append(r'F:/danjo/game')
os.environ['DJANGO_SETTINGS_MODULE'] = 'game.settings'
application = django.core.handlers.wsgi.WSGIHandler()
这样之后就能够在apache中訪问我们的django框架搭建的站点了。
3. 微博功能的实现
微博分享功能须要使用微博API,这里选择使用javascript API。Api的使用须要在微博开放平台注冊应用,并表明站点全部权。
全部须要我们的站点能在外网登录。
所以须要注冊域名,这里我选择使用花生壳动态域名server。并使用了它的免费域名kkopq.xicp.net。
做完以上几步后,实现微博分享就非常easy了。在须要微博的页面加入下面内容:
<script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=2556191936" type="text/javascript" charset="utf-8"></script> //这是微博api的库 注意须要加入注冊应用后获得appkey。
定义分享button:
<p><button class="btn btn-success btn-hg" style="width:200px;height:50px" type="button" id="wb_publish" >share</wb:button></p>
<script>
WB2.anyWhere(function(W){
W.widget.publish({
id : 'wb_publish',
default_text : 'I have gotten {{score}} points in the KKball game! Come to play with me at kkopq.xicp.net![耶][耶][耶]'
});
});
</script>
4.html UI 设计。
网页UI我是用了Flat UI框架。
使用Django框架实现游戏站点搭建的更多相关文章
- django框架-Admin管理站点搭建
在django框架中,admin基本上算是已经写好了的,拿过来进行简单的处理即可以使用的,相对于flask来说已经是相当的便捷了. 在使用中,步骤如下: 1.管理界面本地化:即将英文标题等的变成中文, ...
- 潭州课堂25班:Ph201805201 django框架 第一课 环境搭建 (课堂笔记)
在虚拟机中创建虚拟环 mkvirtualenv -p /usr/bin/python3 djtest mkvirtualenv 是创建命令, -p /usr/bin/python3 是指定在 pyt ...
- Python学习笔记_04:Django框架简介
目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...
- django框架初探
django框架初探 1.web框架介绍 web框架本质是一个socket服务端.每一个端口只能被一个程序监听. web程序分为两个部分: 服务器程序:对socket服务器封装,解析http请求,发送 ...
- 手动搭建简易web框架与django框架简介
目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...
- Django 框架搭建入门案例
1. 什么是 web 框架 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端; # 示例: import socket def handle_re ...
- Django框架搭建(windows系统)
Django框架搭建(windows系统) 一.Django简介 开放源代码的Web应用框架,由Python语言编写,一个大而全的框架. 1.web框架介绍 具体介绍Django之前,必须先介绍WEB ...
- 3/16 Django框架 环境搭建
3/16 Django框架 环境搭建 环境搭建 Python解释器 Python代码通过Python解释器去执行. 编程语言 机器语言---汇编语言(助记符)---高级语言 解释型语言:解释器将代码一 ...
- 初识Django框架——环境搭建前你需要了解的几点
Django是一个开放源代码的Web应用框架,由Python写成. 采用了MVC的框架模式,即模型M,视图V和控制器C. 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是C ...
随机推荐
- 6.11---swagger文件上传的写法【照着写就行了,主要是需要声明contentType未mutilpart---如果不设置这个,就无法识别文件的】
MultipartFile 是直接接收前台传过来的文件,File是抽象出来的文件对象,用来表示文件,一般操作都是操作的File,所以需要将MultipartFile转为File controller写 ...
- Alpha Edition [ Group 1 ]
Deltafish Alpha Edition 一.博客归档(记录人:娄雨禛) 小组会议 DeltaFish 校园物资共享平台 第一次小组会议 DeltaFish 校园物资共享平台 第二次小组会议 D ...
- VC使用CryptoAPI计算MD5
// md5.h #include <tchar.h> #include <wincrypt.h> // 计算Hash,成功返回0,失败返回GetLastError() // ...
- 【YOLO】实时对象检测使用体验
官网:https://pjreddie.com/darknet/yolo/ 以下全部在服务器上完成,服务器上是有opencv等. 1.安装Darknet git clone https://githu ...
- 微信小程序——weui的使用
使用在根目录中复制weui.wxss,app.wxss中引入 在weui.io中查看到自己想要的样式表后,到第二个网站复制代码,复制到自己的项目中即可 <!--pages/register/re ...
- Uncaught TypeError: str.replace is not a function
在做审核页面时,点击审核通过按钮不执行 后来F12控制台查看发现有报错 是因为flisnullandxyzero未执行 然后找出这个方法,此方法为公共方法,将这个方法复制出来 然后使用console. ...
- Django - 路由对应关系
1.对url路由关系命名,以后可以根据此名称,生成自己想要的url urls.py中: url('^fdsaafdf(\d+)/',views.index,name='indexx') url('^f ...
- B.1 接口
几乎所有要学习的接口都位于 System.Collections.Generic 命名空间.图B-1展示了.NET4.5以前主要接口间的关系,此外还将非泛型的 IEnumerable 作为根接口包括了 ...
- CF17E Palisection (回文自动机+DP)
题目传送门 题目大意:给你一个字符串,让你求出有多少对相交的回文子串 啊啊啊啊降智了,我怎么又忘了正难则反! 求相交会很难搞.把问题转化成求互不相交的回文子串再减一下就行了 先利用$PAM$求出以每个 ...
- [luogu2591 ZJOI2009] 函数
传送门 Solution 画图找规律.. Code //By Menteur_Hxy #include <cstdio> #define min(a,b) ((a)>(b)?(b): ...