完整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. 【Java设计模式】工厂模式

    简单工厂模式 简单工厂模式不是23种里的一种,简而言之,就是有一个专门生产某个产品的类.比如下图中的鼠标工厂,专业生产鼠标,给参数0,生产戴尔鼠标,给参数1,生产惠普鼠标. 示例代码: //一个产品接 ...

  2. PHP流程控制语句(if,foreach,break......)

    背景:PHP程序中,必不可少的要用到流程控制语句.这次对于流程控制语句进行一些总结. 条件控制语句和循环控制语句是两种基本的语法结构,它们都是用来控制程序执行流程.也是构成程序的主要语法基础. 一.程 ...

  3. Python3之切片的道理

    list的切片有三个参数:起点,终点,步长 list[::-1] 相当于起点为最后的一个,终点为第一个,然后一次减少一个 更多的看下面的测试 >>> a = [0,1,2,3,4,5 ...

  4. 64位windows系统如何显示32位dcom组件配置

    在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,但是却发现找不到Microsoft Excel程序,这主要是64位系统的问题,excel是32位的组件,所以在正常的系统组件服务里是看不到的 ...

  5. WPF中的两个绑定场景

    1. 如何在诸如ListBox这样的项中绑定父类数据上下文. <ListBox Grid.Row=" ItemsSource="{Binding Entries}" ...

  6. Style在Android中的继承关系

    Style在Android中的继承关系 Android的Styles(样式)和Themes(主题)非常类似Web开发里的CSS,方便开发者将页面内容和布局呈现分开.Style和Theme在Androi ...

  7. easyui 网址

    http://www.runoob.com/jeasyui/jeasyui-datagrid-datagrid23.html http://www.jeasyui.com http://fineui. ...

  8. JavaScript day4(逻辑运算符)

    逻辑运算符 逻辑运算符用于测定变量或值之间的逻辑 逻辑与运算符:&&.同时满足(and). 通过if语句的嵌套来实现: if (num > 5) { if (num < 1 ...

  9. c# 异步执行

    c#异步执行 Action logAction = () => {////执行的操作 }; logAction.BeginInvoke(null, null);

  10. scrapy——4 —反爬措施—logging—重要参数—POST请求发送实战

    scrapy——4 常用的反爬虫策略有哪些 怎样使用logging设置 Resquest/Response重要参数有哪些 Scrapy怎么发送POST请求 动态的设置User-Agent(随即切换Us ...