寶塔默認(rèn)端口8888NginxMysql網(wǎng)站→添加站點(diǎn)→域名修改為ip→根目錄修改名字→數(shù)據(jù)庫(kù)創(chuàng)建Mysql并且記住賬號(hào)密碼默認(rèn)端口號(hào)80

修改網(wǎng)站目錄

Django項(xiàng)目目錄推薦

.
├── app" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 第26期-Django開(kāi)發(fā)-Task2快速搭建網(wǎng)站

第26期-Django開(kāi)發(fā)-Task2快速搭建網(wǎng)站

時(shí)間:2023-05-31 14:12:02 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-05-31 14:12:02 來(lái)源:網(wǎng)站運(yùn)營(yíng)

第26期-Django開(kāi)發(fā)-Task2快速搭建網(wǎng)站:

寶塔

  1. 默認(rèn)端口8888
  2. Nginx
  3. Mysql
  4. 網(wǎng)站→添加站點(diǎn)→域名修改為ip→根目錄修改名字→數(shù)據(jù)庫(kù)創(chuàng)建Mysql并且記住賬號(hào)密碼
默認(rèn)端口號(hào)80

修改網(wǎng)站目錄

Django項(xiàng)目目錄推薦

.
├── apps
│ └── app_1
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── django_project
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-35.pyc
│ │ └── settings.cpython-35.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── media
├── static
└── templates

有個(gè)未知bug注意避雷

解決方法為

新增APP

python3 manage.py startapp APPNAMEsettings.py修改INSTALLED_APPS加入APPNAME

python3 manage.py createsuperuser但是在創(chuàng)建前應(yīng)該先同步數(shù)據(jù)庫(kù)

python3 manage.py migrate根據(jù)提示進(jìn)行輸入。成功后可以看到如下畫面:

修改后臺(tái)語(yǔ)言

settings.py中

LANGUAGE_CODE :語(yǔ)言代碼,zh-hans中文

TIME_ZONE:時(shí)區(qū),Asia/Shanghai杭州時(shí)間

創(chuàng)建表

models.py

from django.db import models# Create your models here.class Blog(models.Model): title = models.CharField(max_length=50, verbose_name="標(biāo)題") content = models.TextField(verbose_name="文章內(nèi)容", default="") count = models.IntegerField(verbose_name="閱讀次數(shù)", default=0) creat_time = models.DateTimeField(auto_now=True, verbose_name="創(chuàng)建時(shí)間") class Meta: verbose_name = '博客管理' verbose_name_plural = verbose_name def __str__(self): return self.title

添加到后臺(tái)

admin.py

from django.contrib import adminfrom .models import Blog# Register your models here.@admin.register(Blog)class BlogAdmin(admin.ModelAdmin): list_display=("title", "creat_time", "count") 同步到數(shù)據(jù)庫(kù)

python3 manage.py makemigrationspython3 manage.py migrate
注意一行一行的輸入
verbose_name,顯示的名字

編寫頁(yè)面邏輯

添加頁(yè)面模板文件夾

settings.py

TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(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', ], }, },]
在添加 os.path.join(BASE_DIR, "templates")前記得先經(jīng) os 庫(kù)導(dǎo)入進(jìn)來(lái)
views.py

from django.shortcuts import render# Create your views here.def index(request): return render(request, "index.html")
將我們定義的方法引入進(jìn)來(lái),然后定義好訪問(wèn)什么路徑來(lái)執(zhí)行這個(gè)方法
在 templates 文件夾下創(chuàng)建一個(gè) html 文件

添加文章詳情頁(yè)面

新建 content.html

編寫業(yè)務(wù)邏輯 views.py

def read_blog(request,id): print(f"{id}:我是通過(guò)前端點(diǎn)擊鏈接來(lái)的") blog = Blog.objects.get(id=id) return render(request, "content.html", {"blog":blog})urls.py

from blog.views import read_blogurlpatterns = [ path('admin/', admin.site.urls), path("", index, name="index"), path("read/<int:id>", read_blog, name="read_blog"),]

部署

安裝 PyMysql

Settings.py

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'blog', 'USER': 'blog', 'PASSWORD': '你的密碼', 'HOST': '虛擬機(jī)的IP', 'PORT': '3306', }}config里面的__init__.py

import pymysqlpymysql.install_as_MySQLdb()


如何遠(yuǎn)程訪問(wèn)云服務(wù)器上的數(shù)據(jù)庫(kù)

登錄寶塔查看數(shù)據(jù)庫(kù)的賬號(hào)密碼,尤其是root密碼

在寶塔上操作

改表法

可能是你的帳號(hào)不允許從遠(yuǎn)程登陸,只能在localhost。這個(gè)時(shí)候只要在localhost的那臺(tái)電腦,登入mysql后,更改 "mysql" 數(shù)據(jù)庫(kù)里的 "user" 表里的 "host" 項(xiàng),從"localhost"改成"%"

mysql -u root -p進(jìn)入MySQL終端后

use mysql;update user set host = '%' where user = 'root'; # 此處的root改為想要遠(yuǎn)程登錄的賬號(hào)select host, user from user;參考鏈接:

授權(quán)法

例如,你想myuser使用mypassword從任何主機(jī)連接到mysql服務(wù)器的話。

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;如果你想允許用戶myuser從ip為192.168.1.3的主機(jī)連接到mysql服務(wù)器,并使用mypassword作為密碼

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;flush privileges; #一定要加上這一句如果是低版本的MySQL,記得把配置文件my.ini做如下操作

#bind-address = 127.0.0.1這一行注釋掉

然后重啟MySQL

接下來(lái)就是通過(guò)DBMS進(jìn)行MySQL數(shù)據(jù)庫(kù)的管理,這里我推薦使用

注意

Django現(xiàn)在已經(jīng)停止支持MySQL5.6之前的版本,這里我使用了目前(2021年6月20日)最新的8.0版本。

VSCode的Remote SSH如何不用每次輸密碼

準(zhǔn)備部署

安裝supervisor

sudo apt install supervisor -y

在虛擬環(huán)境安裝 gunicorn

pip3 install gunicorn
它的配置要比用 uwsgi 方便很多

在項(xiàng)目根目錄下創(chuàng)建一個(gè) gunicorn_start.sh 文件

#!/bin/bash#項(xiàng)目的根目錄NAME="MyBlog"DJANGODIR=/DjangoDev/www/MyBlog #Django project directoryUSER=root # the user to run asGROUP=root # the group to run asNUM_WORKERS=1 # how many worker processes should Gunicorn spawnDJANGO_SETTINGS_MODULE=config.settings # which settings file should Django useDJANGO_WSGI_MODULE=config.wsgi # WSGI module nameecho "Starting $NAME as `whoami`"# Activate the virtual environment# 虛擬環(huán)境的路徑cd $DJANGODIRsource /DjangoDev/env/bin/activateexport DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULEexport PYTHONPATH=$DJANGODIR:$PYTHONPATH# Create the run directory if it doesn't existRUNDIR=$(dirname $SOCKFILE)test -d $RUNDIR || mkdir -p $RUNDIR# Start your Django Unicorn# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)# gunicorn的路徑,一般在虛擬環(huán)境的bin目錄下exec /DjangoDev/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application /--name $NAME /--workers $NUM_WORKERS /--user=$USER --group=$GROUP /--log-level=debug /--log-file=-
USER=server # the user to run as
GROUP=server # the group to run as
這里的用戶名要改為自己的,管理員就是root

修改腳本運(yùn)行權(quán)限權(quán)限

chmod +x gunicorn_start.sh

運(yùn)行

./gunicorn_start.sh

配置 Nginx反向代理

location /static/ { #靜態(tài)文件目錄 alias /DjangoDev/www/MyBlog/static; expires max; access_log off; log_not_found off; }location / {#Django地址 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_redirect off; if (!-f $request_filename) { proxy_pass http://127.0.0.1:8000; break; } }

配置 Supervisor

sudo vim /etc/supervisor/conf.d/myblog.conf并寫入如下內(nèi)容

[program:myblog]command = /DjangoDev/www/MyBlog/gunicorn_start.shuser = rootautostart=trueautorestart=trueredirect_stderr = truestdout_logfile = /var/log/myblog.logstderr_logfile = /var/log/myblog.err
user = root
同樣也要修改成為自己的用戶名
最后更新一下我們?cè)O(shè)置的一系列內(nèi)容

sudo supervisorctl updatesudo supervisorctl reload

關(guān)于后臺(tái)靜態(tài)樣式丟失問(wèn)題

settings.py

STATIC_ROOT = os.path.join(BASE_DIR, "static")并在項(xiàng)目目錄下新建一個(gè) static 的文件夾

運(yùn)行如下命令進(jìn)行靜態(tài)文件收集

python3 manage.py collectstatic

成果展示

一個(gè)小bug解決一下

svg等文件無(wú)法加載的處理方式

修改Nginx的配置文件

location ~ /.(eot|otf|ttf|woff|woff2|svg)$ { add_header Access-Control-Allow-Origin *; }





















關(guān)鍵詞:

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉