使用Django框架实现游戏网站搭建

来源:互联网 发布:python dat文件格式 编辑:程序博客网 时间:2024/06/05 20:25

完整工程链接点击打开链接


上一篇中我们使用了Javascript和Html5实现了弹球游戏,而在本文中我们希望以其为基础实现游戏网站,能够实现用户的注册登录,游戏成绩记录,排名显示,微博分享等功能。





最终效果:


2. 网站的搭建和服务器的搭建

2.1 网站整体构成

网站的搭建我使用django框架。

2.1.1 数据库设计

User:

Field

Type

Null

Key

Default

Description

Name

Varchar(50)

No

Primary

 

用户ID

Password

Varchar(50)

No

 

 

用户密码

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 服务器的搭建

本网站选择使用Apache服务器,apache服务器默认不支持python。所以需要加载外部模块。这里选择使用module_wsgi。


配置步骤:

A.从网站上下载编译好的module_wsgi.so,放置到apache安装目录/modules文件夹。在apache安装目录/conf/httpd.conf文件中添加以下内容已载入该模块。

LoadModule wsgi_module modules/mod_wsgi.soWSGIScriptAlias / "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">  //该目录为django工程所在目录        Order deny,allow        allow from all</Directory>



在django工程目录中添加文件。Django.wsgi。

import osimport sysimport django.core.handlers.wsgisys.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的使用需要在微博开放平台注册应用,并表明网站所有权。所有需要我们的网站能在外网登录。所以需要注册域名,这里我选择使用花生壳动态域名服务器。并使用了它的免费域名kkopq.xicp.net。

         做完以上几步后,实现微博分享就很简单了。在需要微博的页面添加以下内容:

    <script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=2556191936" type="text/javascript" charset="utf-8"></script>  //这是微博api的库 注意需要添加注册应用后获得appkey。

      

 

 

定义分享按钮:

  <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框架。

 


0 0