15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 第26期-Django开发-Task2快速搭建网站

第26期-Django开发-Task2快速搭建网站

时间:2023-05-31 14:12:02 | 来源:网站运营

时间:2023-05-31 14:12:02 来源:网站运营

第26期-Django开发-Task2快速搭建网站:

宝塔

  1. 默认端口8888
  2. Nginx
  3. Mysql
  4. 网站→添加站点→域名修改为ip→根目录修改名字→数据库创建Mysql并且记住账号密码
默认端口号80

修改网站目录

Django项目目录推荐

.
├── 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

有个未知bug注意避雷

解决方法为

新增APP

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

python3 manage.py createsuperuser但是在创建前应该先同步数据库

python3 manage.py migrate根据提示进行输入。成功后可以看到如下画面:

修改后台语言

settings.py中

LANGUAGE_CODE :语言代码,zh-hans中文

TIME_ZONE:时区,Asia/Shanghai杭州时间

创建表

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 adminfrom .models import Blog# Register your models here.@admin.register(Blog)class BlogAdmin(admin.ModelAdmin): list_display=("title", "creat_time", "count") 同步到数据库

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

编写页面逻辑

添加页面模板文件夹

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")前记得先经 os 库导入进来
views.py

from django.shortcuts import render# Create your views here.def index(request): return render(request, "index.html")
将我们定义的方法引入进来,然后定义好访问什么路径来执行这个方法
在 templates 文件夹下创建一个 html 文件

添加文章详情页面

新建 content.html

编写业务逻辑 views.py

def read_blog(request,id): print(f"{id}:我是通过前端点击链接来的") 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': '虚拟机的IP', 'PORT': '3306', }}config里面的__init__.py

import pymysqlpymysql.install_as_MySQLdb()


如何远程访问云服务器上的数据库

登录宝塔查看数据库的账号密码,尤其是root密码

在宝塔上操作

改表法

可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改成"%"

mysql -u root -p进入MySQL终端后

use mysql;update user set host = '%' where user = 'root'; # 此处的root改为想要远程登录的账号select host, user from user;参考链接:

授权法

例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用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

接下来就是通过DBMS进行MySQL数据库的管理,这里我推荐使用

注意

Django现在已经停止支持MySQL5.6之前的版本,这里我使用了目前(2021年6月20日)最新的8.0版本。

VSCode的Remote SSH如何不用每次输密码

准备部署

安装supervisor

sudo apt install supervisor -y

在虚拟环境安装 gunicorn

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

在项目根目录下创建一个 gunicorn_start.sh 文件

#!/bin/bash#项目的根目录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# 虚拟环境的路径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的路径,一般在虚拟环境的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

修改脚本运行权限权限

chmod +x gunicorn_start.sh

运行

./gunicorn_start.sh

配置 Nginx反向代理

location /static/ { #静态文件目录 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并写入如下内容

[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
同样也要修改成为自己的用户名
最后更新一下我们设置的一系列内容

sudo supervisorctl updatesudo supervisorctl reload

关于后台静态样式丢失问题

settings.py

STATIC_ROOT = os.path.join(BASE_DIR, "static")并在项目目录下新建一个 static 的文件夹

运行如下命令进行静态文件收集

python3 manage.py collectstatic

成果展示

一个小bug解决一下

svg等文件无法加载的处理方式

修改Nginx的配置文件

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





















关键词:

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭