千秋戏是单机游戏《古剑奇谭》中的一个小卡牌游戏。最近突然有兴趣把它实现成网页版,所以就想尝试着用python的web框架django实现出来。然而以前完全没接触过前后端的东西,所以开几篇博客记录一下过程中用到的知识,主要是给自己留档。这东西肯定存在着很多问题,还有赤果果的侵权啊什么的,所以网址和代码就不放出来了,我实现出来你们也玩不到,略略略。
django项目创建
首先安装django,ubuntu系统直接pip安装就能够成功,如果不成功可以参考菜鸟教程
sudo pip install Django
然后创建项目:
django-admin startproject Qianqiuxi
于是Qianqiuxi项目就构建了起来,撒花~
这个项目的目录树是这样的:
Qianqiuxi
-Qianqiuxi
- __init__.py
- settings.py
- urls.py
- wsgi.py
-db.sqlite3
-manage.py
其中manage.py是一个实用的命令行工具,可让帮助你与 Django 项目进行交互;db.sqlite3是与数据库相关的文件;settings.py是项目的相关配置,urls.py是项目的URL声明;wsgi.py是一个WSGI兼容的Web服务器的入口。
项目运行
项目创建完成后的第一件事就是如何把它跑起来,还好django的基础教程都会将这一步:
python manage.py runserver 0.0.0.0:8000
这条命令是把项目在本地跑起来,后面的端口号可以自行指定。终端敲下这条命令后打开浏览器输入0.0.0.0:8000
就能够看到一个类似helloWorld的界面了。
第一个页面
因为全都是自己摸索,所以从这一步开始这篇博客可能会错漏百出,仅供完全没有经验的人参考,大佬们如果看到什么辣眼睛的操作请务必评论区指出。
django是基于MVC思想的,我的理解就是说框架保证了前端表现形式和后端内容的分离,这一分离主要是通过模板实现的。
模板在我理解就是项目的前端(html)部分,我们在项目根目录下创建一个叫templates的文件夹,在里面创建一个hello.html,作为我们的第一个页面。
<html>
<head>准备好成为栖霞牌王了吗</head>
<body>
</body>
</html>
现在这个页面只有一个标题,写完跟原生html完全一样。
接下来一步就是修改 settings.py,在TEMPLATE的’DIRS’字段写入模板所在位置:
...
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR+"/templates",],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
...
页面写好后需要对其进行显示,在Qianqiuxi/Qianqiuxi下创建view.py,实现一个函数hello:
from django.shortcuts import render
def hello(request):
return render(request, 'hello.html')
这一函数的作用是把数据填充进模板,然后把结果返回给浏览器,我们这个页面没有需要填充的数据,因此就直接把hello.html传给浏览器了。
到这一步距离真正呈现页面还有一个问题:如何把页面与url绑定起来。解决的方法就是在urls.py中添加url。
from django.conf.urls import url
from . import view
urlpatterns = [
url('hello/', view.hello),
]
然后启动服务器,在浏览器网址输入0.0.0.0:8000/hello
就能看到我们刚才写的页面:
这里的逻辑个人理解是:输入网址后,首先urls.py搜索当前url,然后定位到view.py中的hello函数,而hello函数负责把模板hello.html返回给浏览器。
页面跳转
第一个页面当然不只是用来欢迎用户的,而是要跳转到游戏页面的,页面跳转就用到了Django的另一个强大功能——表单。
表单负责与用户进行交互,把用户输入的信息传递给后端,然后后端进行处理。在这里我们在hello.html中加一个名为“发牌”的按钮,用户点击此按钮就跳转到游戏页面进行发牌。
发牌按钮并不是原生html中的button,而是用表单实现的:
...
<body>
<form action="/game">
<input type="submit" value="发牌">
</form>
</body>
...
这一表单让我们能够自动跳转到/game
下。
然后我们需要再写一个game.html,目前没有实现发牌功能,就先写一串字符好了:
<html>
<head></head>
<body>
<h>准备发牌...</h>
</body>
</html>
然后在view.py下创建一个函数fapai
,返回game.html,再在urls.py的url列表中添加/game
,指向view.fapai,运行服务器:
点“发牌”按钮:
页面跳转完成,可以开始实现发牌了。