VScode Django项目插件
cd pyenv/ # 进入Python环境的目录
source bin/activate
config
的应用django-admin startproject config
config
改为MyBlog
之所以需要这样创建,是因为内层配置
config
与外层项目MyBlog
作出区分,这里也可以无需这样,个人开发习惯。
cd
进入到MyBlog
项目里面,并用ls
命令确保确保当前目录中是否存在manage.py
文件,若存在则可以创建应用python manage.py startapp myblog
config
中的settings.py
文件中,是否添加了当前应用,没有则添加INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myblog', # 若无,则手动添加,将所创建的应用名,依次放置在后面即可
]
MySQL 8.0
(Django3.x
需要高版本的MySQL
才能连接成功)和http
服务器Nginx 1.19
Django
项目绑定Django
框架中默认会创建一部分数据表python manage.py makemigrations # 自己创建了数据表,第一次需要执行
python manage.py migrate # 数据迁移命令
python manage.py createsuperuser
根据提示进行输入。成功后可以看到如下画面:
LANGUAGE_CODE = 'zh-hans' # LANGUAGE_CODE :语言代码,
TIME_ZONE = 'UTC' # TIME_ZONE:时区
USE_I18N = True
USE_L10N = True
USE_TZ = True
# 修改 models.py 文件
from django.db import models
# Create your models here.
class Blog(models.Model):
title = models.CharField(max_length=50, verbose_name="标题")
content = models.TextField(verbose_name="文章内容", default="")
count = models.IntegerField(verbose_name="阅读次数", default=0)
creat_time = models.DateTimeField(auto_now=True, verbose_name="创建时间")
class Meta:
verbose_name = '博客管理' # 单数名
verbose_name_plural = verbose_name # 复数名
def __str__(self):
return self.title
# 修改 admin.py
from django.contrib import admin
from .models import Blog
# Register your models here.
@admin.register(Blog) # 装饰器,绑定所要在后台显示的数据表
class BlogAdmin(admin.ModelAdmin):
list_display=("title", "creat_time", "count")
# Terminal中
python manage.py makemigrations
python manage.py migrate
注意一行一行的输入
在添加
os.path.join(BASE_DIR, "templates")
前需要先将os
库导入进来
# 修改 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',
],
},
},
]
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, "index.html")
from os import name
from django.contrib import admin
from django.urls import path
from blog.views import index
urlpatterns = [
path('admin/', admin.site.urls),
path("", index, name="index"),
]
将我们定义的方法引入进来,然后定义好访问什么路径来执行这个方法
<html>
<head>
<title>我的首页title>
head>
<body>
<h1>欢迎来到我的网站!h1>
<ul>
{% for blog in blogs %}
<li>
<a href="{% url 'read_blog' blog.id %}">{{blog.title}}a>
li>
<p>创建于{{blog.creat_time}}p>
{% endfor %}
ul>
body>
html>
# 新建 content.html
<html>
<head>
<title>我的首页title>
head>
<body>
<a href="/" style="float: right;">回到首页a>
<h1>{{blog.title}}h1>
<div>
{{blog.content}}
div>
body>
html>
def read_blog(request,id):
print(f"{id}:我是通过前端点击链接来的")
blog = Blog.objects.get(id=id)
return render(request, "content.html", {"blog":blog})
# 多个参数可用locals()
urlpatterns = [
path('admin/', admin.site.urls),
path("", index, name="index"),
path("read/" , read_blog, name="read_blog"),
]
pymsql
pip install pymysql
Settings.py
文件DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'blog', # 数据库名称
'USER': 'blog', # 用户名
'PASSWORD': '你的密码', # 密码
'HOST': '虚拟机的IP', # 内网IP地址,ip a可查看
'PORT': '3306', # mysql默认的端口号
}
}
__init__.py
文件import pymysql
pymysql.install_as_MySQLdb()
IP
,在此执行即可成功Superivisor
是用Python
开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon
,并监控进程状态,异常退出时能自动重启,【Supervisor 使用详解】deactivate # 退出python虚拟环境,退出后才能安装
sudo apt install supervisor -y
Gunicorn
是Green Unicorn
的简称,它是一个 UNIX
下的 WSGI HTTP
服务器,它是一个 移植自Ruby
的Unicorn
项目的 pre-fork worker
模型,【Gunicorn使用介绍】source pyenv/bin/activate # 激活python环境后安装
pip install gunicorn
Django
项目根目录下创建一个gunicorn_start.sh
文件#!/bin/bash
NAME="MyBlog" # 修改处1,Django项目名
DJANGODIR=/home/forget/Desktop/DjangoDemo/MyBlog # 修改处2,Django项目路径
USER=forget # 修改处3,系统用户名,whoami可查询
GROUP=forget # 修改处4,the group to run as ,whoami可查询
NUM_WORKERS=1 # how many worker processes should Gunicorn spawn
DJANGO_SETTINGS_MODULE=config.settings # which settings file should Django use,修改处5,Django项目配置名要一致
DJANGO_WSGI_MODULE=config.wsgi # WSGI module name 修改处6,Django项目配置名要一致
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/forget/Desktop/DjangoDemo/pyenv/bin/activate # 修改处7,django项目所在的虚拟环境,此处相当于去激活环境
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(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)
exec /home/forget/Desktop/DjangoDemo/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \ # 修改处8
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--log-level=debug \
--log-file=-
chmod +x gunicorn_start.sh
./gunicorn_start.sh
# 修改 settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "static")
python manage.py collectstatic
# 静态文件配置
location /static/ {
alias /home/forget/Desktop/DjangoDemo/MyBlog/static/; # 修改为自己的路径
expires max;
access_log off;
log_not_found off;
}
# 反向代理
location / {
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;
}
}
log
文件夹,用于储存日志mkdir log
Terminal
中输入sudo vim /etc/supervisor/conf.d/myblog.conf
vim
编辑器先按i
,此时左下角就会出现INSERT
[program:myblog]
command = /home/forget/Desktop/DjangoDemo/MyBlog/gunicorn_start.sh
user = forget
autostart=true
autorestart=true
redirect_stderr = true
stdout_logfile = /home/forget/Desktop/DjangoDemo/MyBlog/log/myblog.log
stderr_logfile = /home/forget/Desktop/DjangoDemo/MyBlog/log/myblog.err
同样也要修改成为自己的用户名,接着
Esc
,再按住shift + :
,输入wq
,写入退出即可
若需要修改,也可以在宝塔中直接修改
sudo supervisorctl update
sudo supervisorctl reload
之所以需要创建此,是因为创建后就不需要在前台启动,在后台通过Nginx启动即可。只需要服务器开启即可访问等一系列操作。