完整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框架实现游戏站点搭建的更多相关文章

  1. django框架-Admin管理站点搭建

    在django框架中,admin基本上算是已经写好了的,拿过来进行简单的处理即可以使用的,相对于flask来说已经是相当的便捷了. 在使用中,步骤如下: 1.管理界面本地化:即将英文标题等的变成中文, ...

  2. 潭州课堂25班:Ph201805201 django框架 第一课 环境搭建 (课堂笔记)

    在虚拟机中创建虚拟环 mkvirtualenv -p /usr/bin/python3 djtest mkvirtualenv 是创建命令, -p /usr/bin/python3  是指定在 pyt ...

  3. Python学习笔记_04:Django框架简介

    目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...

  4. django框架初探

    django框架初探 1.web框架介绍 web框架本质是一个socket服务端.每一个端口只能被一个程序监听. web程序分为两个部分: 服务器程序:对socket服务器封装,解析http请求,发送 ...

  5. 手动搭建简易web框架与django框架简介

    目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...

  6. Django 框架搭建入门案例

    1. 什么是 web 框架 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端; # 示例: import socket def handle_re ...

  7. Django框架搭建(windows系统)

    Django框架搭建(windows系统) 一.Django简介 开放源代码的Web应用框架,由Python语言编写,一个大而全的框架. 1.web框架介绍 具体介绍Django之前,必须先介绍WEB ...

  8. 3/16 Django框架 环境搭建

    3/16 Django框架 环境搭建 环境搭建 Python解释器 Python代码通过Python解释器去执行. 编程语言 机器语言---汇编语言(助记符)---高级语言 解释型语言:解释器将代码一 ...

  9. 初识Django框架——环境搭建前你需要了解的几点

    Django是一个开放源代码的Web应用框架,由Python写成. 采用了MVC的框架模式,即模型M,视图V和控制器C. 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是C ...

随机推荐

  1. 为什么选择Sqoop?(三)

    为什么选择 Sqoop? 通常基于三个方面的考虑: 1.它可以高效.可控地利用资源,可以通过调整任务数来控制任务的并发度.另外它还可以配置数据库的访问时间等等. 2.它可以自动的完成数据类型映射与转换 ...

  2. Select2插件ajax方式加载数据并刷新页面数据回显

    今天在优化项目当中,有个要在下拉框中搜索数据的需求:最后选择使用selec2进行开发: 官网:http://select2.github.io/ 演示: 准备工作: 文件需要引入select2.ful ...

  3. 使用淘宝ip地址库开放接口在网站上显示当前用户所在的城市省份网络(完整代码)

    查看效果:每天进步网  在网站的页脚 <p>欢迎来自 <?php function GetIpCity() {$realip = '';$unknown = 'unknown';if ...

  4. win32窗口映射(部分)

    先理解一下“窗口”与“视区”的概念.“窗口”是逻辑坐标下的矩形区域,“视区”是设备坐标系下的区域.根据“窗口”和“视区”的大小可以确定x方向和y方向的比例因子. 例子如下: VOID OnPaint( ...

  5. 汇编:MSR/MRS/BIC指令

    1.MRS指令MRS指令的格式为:MRS{条件}   通用寄存器,程序状态寄存器(CPSR或SPSR)MRS指令用于将程序状态寄存器的内容传送到通用寄存器中.该指令一般用在以下两种情冴: Ⅰ.当需要改 ...

  6. 使用form标签时注意事项

    今天写程序的时候,使用了一个form:select标签,然后系统一直报错 原因找了好久也没找到 后来咨询得知, 在使用form:标签的时候  前后的form标签要写成<form:form> ...

  7. for循环提高内存访问效率的做法

    今天写程序的时候突然想到一点,记录一下: 计算机内存地址是线性排列组织的,而利用for循环对高维数组结构进行遍历处理的时候,要保证最内层for循环遍历的是高维数组的最低维度,这样可以最大化利用CPU的 ...

  8. CentOS 7.2安装配置Vsftp服务器

    一.配置防火墙,开启FTP服务器需要的端口 CentOS 7.2默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  9. 第十三节:pandas之groupby()分组

    1.Series()对象分组 1.1.单级索引 1.2.多级索引 2.DataFrame()对象分组 3.获取一个分组,遍历分组,filter过滤.

  10. spring配置Converter、Formatter日期转换器

    最近有点恶补spring的嫌疑,然后学了一点知识点纪录在此. 往往在项目中我们会遇到前端页面输入一个日期类型的字符串传递到后端后我们需要去做转换.甚至在传递的过程中就会报错. Spring有一个一劳永 ...