用python写游戏的后端服务器后端开发,有什么好的实践

原来python开发后端服务器还可以这么简单(未完成) - CSDN博客
原来python开发后端服务器还可以这么简单(未完成)
原来python开发后端服务器还可以这么简单(未完待续)
作为一个android开发者,工作和生活中想写一个服务器作为测试,可是都很麻烦。这两天跟着书写了python+Django的管理系统,另外提供web接口可以给前端使用。本次项目使用pycharm编辑器,版本python 3.5。下面将一步步从零基础开发出此项目。.效果图:
1.python基础学习(可以跳过)
对于python基础语法学习,当然看下廖老师的文章就可以了。里面有安装及如何使用
当然我还是更喜欢用编辑器开发,pycharn的下载地址如下(下载专业版更好):
使用pip命令下载安装django:
在cmd 命令窗口输入 python,安装成功即可显示python版本
python安装成功后,输入pip命令既可以查看pip是否成功:
成功后,使用pip 安装Django,输入如下命令:pip install django
片刻既可以安装成功。另外pip uninstall django卸载django
打开pycharm,和其他IDEAu常用一样,我们创建django项目:
准备结束,下面就可以开始我们的正式项目了
2.Django实现网站系统
django文件说明
templates文件夹我们存放html文件,Test是我们项目,Test1是我们的应用。urls.py负责存放路径
views.py用于写我们方法。models.py是数据库映射。
3.开发web接口
本文已收录于以下专栏:
相关文章推荐
解决跨域请求问题https://flask-cors.readthedocs.io/en/latest/
使用了一个Flask扩展Flask-Cors,传入需要允许的地址,即可实现跨域请求。示例代码...
python下的开发框架挺多,Django,Tornado,Flask…,我们选用了Django来做演示是因为Django的restful框架-djangorestframework开发Restful...
前一段时间有人在知乎提了/question/,如何面试Python工程师?我斗胆回答了一下,
目标用已有的丰富图片资源建一个看图网站条件开发语言:python3库:flask
:一个开源的python web服务器框架
jinja2:flask默认的模板引擎编辑器:推荐pycharm一个最...
使用Python来开发WebService,实现服务端、客户端,及完成接口调用。
最近想尝试一下在IBM Bluemix上使用Python语言创建Web应用程序,所以需要在本地搭建Python Web的开发测试环境。关于Python的版本 进入Python的网站,鼠标移到导航条上的...
VC中常用的文档类,视图类,框架类,应用程序类,自定义类中获取其它四个类的方法 
GET App 
   AfxGetInstanceHandle() 
   AfxGetApp() ...
这篇文章主要介绍了Python实现基于HTTP文件传输的方法,以实例形式详细讲述了server端与client端的实现代码,非常具有实用价值,需要的朋友可以参考下本文实例讲述了Python实现基于HT...
利用python中的socket模块中的来实现UDP协议,这里写一个简单的服务器和客户端。为了说明网络编程中UDP的应用,这里就不写图形化了,在两台电脑上分别打开UDP的客户端和服务端就可以了。
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)管理后台-后端-Python篇 - CSDN博客
管理后台-后端-Python篇
python下的开发框架挺多,Django,Tornado,Flask…,我们选用了Django来做演示是因为Django的restful框架-djangorestframework开发RestfulAPI足够简单成熟。目前Django的最新版本为1.9,而Django从1.7开始已经对Python的最低版本要求到2.7以上了,虽然官方推荐使用Python3,但笔者还是建议使用2.7,因为很多python下的轮子都不是很支持Python3,例如Twisted(Python的网络开发框架)也是最近才开始支持Python3。
我们先搭建基础环境
软件环境:
我们创建一个Centos6.6的虚拟机,这里做一个小笔记,关于VisualBox如何快速克隆Centos虚拟机:
1.复制虚拟电脑弹出框,勾选重新初始化所有网卡的MAC地址
2.将/etc/udev/rules.d/70-persistent-net.rules中的eth1 MAC地址覆盖到/etc/sysconfig/network-scripts/ifcfg-eth0中的HWADDR,修改DEVICE=eth1
3.重启网络 /etc/init.d/network restart
centos默认的python是2.6的,我们需要下载2.7源码覆盖安装
& yum install -y wget gcc sqlite-devel openssl-devel zlib-devel
& cd /tmp/
& wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
& tar -xf Python-2.7.10.tgz
& cd Python-2.7.10
& ./configure
& make install
& wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo /usr/local/bin/python
& easy_install django
& easy_install djangorestframework
& easy_install django-cors-headers
& django-admin startproject RestfulProject
& cd RestfulProject
& python manage.py startapp database
将database加入到INSTALLED_APPS
INSTALLED_APPS = (
"database",
数据库建模
from django.db import models
from django.utils import timezone
class News(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(blank=True)
create_time = models.DateTimeField(default=timezone.now)
将News加入到django的后台自动化管理django-admin中
from django.contrib import admin
from .models import *
admin.site.register(News)
数据库初始化
& python manage.py makemigrations database
& python manage.py migrate
& python manage.py createsuperuser
一个Django的基础项目即完成,我们跑起来,看看
& python manage.py runserver 0.0.0.0:8000
我们用djangorestframework来构建最简单的CRUD
INSTALLED_APPS = (
'rest_framework',
from rest_framework import serializers,viewsets
from database.models import News
class NewsSerializer(serializers.ModelSerializer):
class Meta:
model = News
class NewsViewSet(viewsets.ModelViewSet):
serializer_class = NewsSerializer
queryset = News.objects.all()
from django.conf.urls import include
from rest_framework import routers
from RestfulProject.views import NewsViewSet
router = routers.DefaultRouter()
router.register(r'news', NewsViewSet,base_name='news')
urlpatterns = [
url(r'^', include(router.urls)),
我们可以使用postman来测试我们写好的接口,但是djangorestframework本身集成了webapi的在线浏览功能,可以更方便的测试
我们来整合BasicAuth验证功能,djangorestframework的默认验证是使用django自带的session验证,我们首先来看看默认的验证是怎样的
from rest_framework.permissions import IsAuthenticated
class NewsViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticated,)
我们再访问这个接口将返回403错误
我们来将默认认证换成BasicAuth
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
再访问这个接口将返回401错误,浏览器根据该错误将弹出认证界面
按照制定的接口文档,我们再补全一个认证接口给客户端登录使用
from rest_framework.views import APIView
from rest_framework.response import Response
class UserViewSet(APIView):
permission_classes = (IsAuthenticated,)
def get(self, request):
content = {
'userid':request.user.id,
'username':request.user.username,
return Response(content)
from RestfulProject.views import UserViewSet
urlpatterns = [
url(r'^auth/info/$', UserViewSet.as_view()),
书写扩展的协议-批量删除
编辑RestfulProject/views.py
from rest_framework.decorators import list_route
from rest_framework import status
class NewsViewSet(viewsets.ModelViewSet):
@list_route(methods=['delete',])
def deletes(self, request, **kwargs):
ids = request.GET['ids'].split(',')
News.objects.filter(id__in=ids).delete()
return Response(status=status.HTTP_204_NO_CONTENT)
书写扩展协议-搜索
class NewsViewSet(viewsets.ModelViewSet):
serializer_class = NewsSerializer
permission_classes = (IsAuthenticated,)
def get_queryset(self):
if not 'search' in self.request.GET:
ft = News.objects.all()
ft = News.objects.filter(title__contains=self.request.GET['search'])
return ft.order_by('-create_time')
书写扩展协议-分页
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
from collections import OrderedDict
class StandardResultsSetPagination(PageNumberPagination):
page_size = 50
page_size_query_param = 'page_size'
max_page_size = 1000
def get_paginated_response(self, data):
return Response(OrderedDict([
('total_count', self.page.paginator.count),
('page_count',self.page.paginator.num_pages),
('next', self.get_next_link()),
('previous', self.get_previous_link()),
('results', data)
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'RestfulProject.pagination.StandardResultsSetPagination',
后端基本完成了,还剩下最后一个问题CORS,我们在本地写一个简单的jquery
&script src="/jquery/2.1.4/jquery.min.js"&&
$.get("http://172.17.9.177:8000/news/");
在chrome里面调试一下会出现如下错误
XMLHttpRequest cannot load http://172.17.9.177:8000/news/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 401.
我们用django-cors-headers来解决这个问题:
INSTALLED_APPS = (
'corsheaders',
将cors中间件放置在monMiddleware之前
MIDDLEWARE_CLASSES = (
'corsheaders.middleware.CorsMiddleware',
'monMiddleware',
设置任意网址的跨域请求都被服务器接受
CORS_ORIGIN_ALLOW_ALL = True
再次用jquery测试,之前那个错误将不再出现。
此文数据库模型、协议的定义参见
本文已收录于以下专栏:
相关文章推荐
前一段时间有人在知乎提了/question/,如何面试Python工程师?我斗胆回答了一下,
python/php+javascript的组合又一次的取得了巨大成功(facebook后端全部php). 越来越多的人预测到Java语言体系迟早要完, java曾经最大的两大优势:全平台兼容, 学习...
本来公司的电脑上有ubuntu的,不知道为啥给我装上了坑爹的windows,也许是为了照顾我,但是公司的那个网速和装pyqt的开发环境也太tm的恶心了啊….明天就要去公司了,今天好好装吧。但愿一个星期...
前言准备:
输入变量可称呼为预测变量、自变量、属性变量、解释变量,有时候就称为变量;
输出变量称为:响应变量或因变量。本篇目的:预测定性响应变量的方法及分类,预测一个定性响应变量也指对观测分类(c...
北京找工作的感悟。
今天去面试了平台后端开发(Python),也拿到了offer,大致记录下面试内容,自我介绍后问了以下问题:
手写Python生成器,这个算比较简单的,直接写个带yield的函数就可以了。
手写链表翻转...
http://blog.csdn.net/ayocross/article/details/     url
先介绍下我的情况:通信背景,工作一年多不到两年。之前...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)(李是技术帝)
(tomato and egg)
第三方登录:(李是技术帝)
(tomato and egg)
第三方登录:

我要回帖

更多关于 python后端服务器框架 的文章

 

随机推荐