1. 程式人生 > >pycharm建立django專案linux部署

pycharm建立django專案linux部署

大家好,我是烤鴨:
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

這是推薦一篇:

上面文章的核心內容:

讓系統預設使用Python 3.4.3

這裡強調一下,讀者在更加本經驗操作,不是像白痴一樣什麼都不懂就操作。。。關於截圖中刪除/usr/bin/python的操作。請先使用ls -al /usr/bin/python 檢視下這個軟連結指向的檔案。或者先將原來的python軟連線重名 mv /usr/bin/python /usr/bin/python2.7.5

以便後面好恢復。 


上面我們已經將Python 3.4.3安裝完成,但是我們進入shell後,檢視python版本號: python -V,發現python還是2.7.5版本。

升級python之後由於將預設的python指向3.4.3以後,yum不能正常使用,需編輯下yum的配置檔案:vi /usr/bin/yum,這裡需要先將原來的python軟連線重名 mv /usr/bin/python /usr/bin/python2.7.5

把檔案頭部的#!/usr/bin/python改成#!/usr/bin/python2.7.5儲存退出即可;

我們建立一個新的連結:

ln -s /usr/local/bin/python3.4 /usr/bin/python

檢驗python指向是否成功:python -V

14.2 安裝專案需要的庫

升級pip到最新版本:

pip install --upgrade pip

  requests包:

pip install requests

  mysql包和libmysqlclient包:

yum -y install mysql-devel

yum install libmysqlclient-dev

  centos 7 已經沒有 libmysqlclient-dev這個了,可以使用 

pip install mysqlclient

  安裝多個pip,指定切換pip的ln軟連線

 使用pip安裝的時候,不是最新版的pip
 ls -al /usr/bin/pip  檢視下這個軟連結指向的檔案
 重新命名軟連線 mv /usr/bin/pip /usr/bin/pip2.7.5
 ln -s /usr/local/bin/pip3.4 /usr/bin/pip
(/usr/local/bin/pip3.4是指定安裝pip的路徑)

報錯如下:(沒報錯的跳過)

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
 

報這個錯的:

error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory

解決方案:

安裝django:

pip install Django
 This may be because you are using a version of pip that doesn't
    understand the python_requires classifier. Make sure you
    have pip >= 9.0 and setuptools >= 24.2, then try again:
    
        $ python -m pip install --upgrade pip setuptools
        $ python -m pip install django
    
    This will install the latest version of Django which works on your
    version of Python. If you can't upgrade your pip (or Python), request
    an older version of Django:
    
        $ python -m pip install "django<2"
    

進到專案目錄,執行啟動命令

$ nohup python manage.py runserver 0.0.0.0:8888 &

這時候訪問伺服器的8888埠就可以訪問到了。