pytho部署web项目比java简单一点,虽然springboot内置了tomcat。
环境:
pycharm专业版 python3.6
1.安装python
python下载:
https://www.python.org/downloads/
我使用的3.6版本
2.配置环境变量
path目录设置到python的安装目录
3.创建django项目
会在你生成目录的env下自动安装所需的环境和库
如下图:
4.说一下主要文件:
settings.py 配置文件
urls.py 路由
templates 静态资源
manage.py 主程序
wsgi.py 网关接口
5.创建自己的模块
打开终端:
python manage.py startapp myapp
6.注册模块
7.编写路由
在myapp下的view.py里编写index方法
import datetime from django.http import HttpResponse from django.shortcuts import render # Create your views here. def index(request): s = 'Hello World!' current_time = datetime.datetime.now() html = '<html><head></head><body><h1> %s </h1><p> %s </p></body></html>' % (s, current_time) return HttpResponse(html)
8.添加映射
在url里配置访问路径,类似java中某个controller的requestMapping
9.启动项目
上一张访问成功的图:
10.返回json数据
按照上面的写法,添加路由和映射
views.py加上方法:
import datetime import json from django.http import HttpResponse from django.shortcuts import render # Create your views here. def index(request): s = 'Hello World!' current_time = datetime.datetime.now() html = '<html><head></head><body><h1> %s </h1><p> %s </p></body></html>' % (s, current_time) return HttpResponse(html) def indexJson(request): current_time = datetime.datetime.now() resp = {'code': '100', 'message': '成功','data': current_time.strftime('%Y-%m-%d %H:%M:%S')} return HttpResponse(json.dumps(resp), content_type="application/json")
urls.py增加映射:
from django.contrib import admin from django.urls import path from myapp import views urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), path('indexJson/', views.indexJson), ]
这样返回的就是标准的json格式的数据了
11.关于花生壳配置映射,但是无法访问
settings.py改
ALLOWED_HOSTS = [ '*' ]
这样就允许所有的ip访问
12.数据库配置
13.创建数据库实体对象
编写models.py
from django.db import models class users(models.Model): # 如果没有models.AutoField,默认会创建一个id的自增列 a_id = models.IntegerField() name = models.TextField() create_time = models.DateTimeField()
views.py
def list(request): result_set = models.users.objects.all().values('a_id', 'name', 'create_time') data_list = result_set[:] # queryset转为list print(type(list(data_list))) data = list(data_list) resp = {'code': '100', 'message': '查询成功' , "data": data} print(json.dumps(resp, cls=CJsonEncoder)) return HttpResponse(json.dumps(resp, cls=CJsonEncoder), content_type="application/json") class CJsonEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(obj, datetime.date): return obj.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, obj)
另外说一下:
关于返回列表数据,时间无法转json的问题,所以增加了
CJsonEncoder方法
14.linux部署
之前一直在找打包的方法,类似java打成jar包,可以直接java -jar
python好像不需要打包,直接把pycharm的打包文件夹复制到linux服务器上。
14.1 安装python
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz tar Jxvf Python-3.6.4.tar.xz cd Python-3.6.4 ./configure --prefix=/usr/local/python3 make && make install
因为我之前安装的版本是python2,现在是python3,但是python -v 还是python2.7
这是推荐一篇:
python2升级到python3
https://jingyan.baidu.com/article/86112f137e502a2736978763.html
14.2 安装项目需要的库
升级pip到最新版本:
pip install --upgrade pip
requests包:
pip install requests
mysql包和libmysqlclient包:
yum -y install mysql-devel yum install libmysqlclient-dev
报错如下:(没报错的跳过)
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile File "/usr/libexec/urlgrabber-ext-down", line 28 except OSError, e: ^ SyntaxError: invalid syntax File "/usr/libexec/urlgrabber-ext-down", line 28 except OSError, e: ^ SyntaxError: invalid syntax File "/usr/libexec/urlgrabber-ext-down", line 28 except OSError, e: ^ SyntaxError: invalid syntax解决方案:
打开/usr/libexec/urlgrabber-ext-down,修改第一行,同上面百度经验的,
改为#! /usr/bin/python2.7.5
安装django:
pip install Django
进到项目目录,运行启动命令
$ nohup python manage.py runserver 0.0.0.0:8888 &
这时候访问服务器的8888端口就可以访问到了。