纯手撸 Django web 框架实现文章上传

纯手撸 Django web 框架实现文章上传

在上面一节创建web网站基础上增加文章上传的功能

  • 添加模型
    • 文章对象模型应当包含: 文章标题、文章类别、文章作者、发布时间和文章内容
    • 字段类型参考: docs.djangoproject.com/zh-hans/4.0...
    • Ch arField、 TextField 、 DateField
    • 要注册model到管理后台,否则模型无法在管理后台显示
  • 从管理后台上传数据
  • 优化显示字段

操作步骤

ini 复制代码
#创建Django环境
django-admin startproject mysite
cd mysite
python manage.py  startapp myweb


#建立默认的admin数据模型[models.py],并访问admin页面[admin.py] 
#修改settings.py
1、添加myblog至
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bootstrap4',
    'myweb'
]
1、修改数据库地址【配置引擎、数据库、地址、端口号、用户、密码】
2、修改语言、时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = True

mysql> create database django;


#同步数据
#python manage.py migrate

#建立管理页面的用户密码
python manage.py createsuperuser



# 运行服务
python manage.py  runserver 0.0.0.0:8080


#访问地址
#http://127.0.0.1:8080/admin/

#创建模型
#参考: https://docs.djangoproject.com/zh-hans/4.1/intro/tutorial02
#在admin.py 注册model

#更新model ,并同步数据
#Python manage.py makemigrations
#python manage.py migrate

创建项目及应用

bash 复制代码
#创建Django环境
django-admin startproject mysite
cd mysite
python manage.py  startapp myweb

部署安装数据库

安装docker

csharp 复制代码
#cat  > init.sh
#!/bin/bash
##################################################################
#Auth: wei
##################################################################
Docker_Install () {
    # step 1: 安装必要的一些系统工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2 lrzsz curl telnet tcpdump tree vim  lrzsz  wget  iotop  lsof
    # Step 2: 添加软件源信息
    sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # Step 3
    sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    # Step 4: 更新并安装Docker-CE
    sudo yum makecache fast
    sudo yum -y install docker-ce
    # Step 4: 开启Docker服务
    sudo service docker start
cat >  /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.ccs.tencentyun.com"
    ],
    "host": [
      "tcp://0.0.0.0:2375",
      "unix:///var/run/docker.sock"
    ],
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
      "max-size": "500m",
      "max-file": "3"
    },
    "storage-driver": "overlay2",
    "default-ulimits": {
      "nofile": {
        "Name": "nofile",
        "Hard": 64000,
        "Soft": 64000
      }
    },
    "max-concurrent-downloads": 20,
    "max-concurrent-uploads": 20
}
EOF
systemctl daemon-reload
systemctl start docker.service
systemctl enable docker.service
}

Docker_Install

安装数据库 mysql 8.0.33

mysql要求8版本以上

sql 复制代码
docker pull mysql
docker volume create mysql-data
docker run -d --name=mysql-server -v mysql-data:/var/lib/mysql -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql

#连接数据库
docker exec -it mysql-server mysql -u root -p

#创建数据库
mysql> create  database django;

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, myweb, sessions
Running migrations:
  Applying myweb.0001_initial... OK

修改应用配置

建立默认的admin数据模型,并访问admin页面

创建数据库及用户密码[ >create database django ]

参考官方文档: docs.djangoproject.com/zh-hans/4.1...

修改settings.py配置 【添加app,修改数据库,修改时区和语言】

数据库需要8.0以上版本

python 复制代码
### ###   mysite/mysite/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bootstrap4',
    'myweb'
]

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    'default': {
        'ENGINE': 'django.db.backends.mysql',   #默认
        'NAME': 'django',                       #连接的数据库
        'USER': 'root',                       #mysql用户名
        'PASSWORD': '123456',       #mysql密码
        'HOST': '10.0.0.9',         #mysql地址
        'PORT': '3306',             #mysql端口
        'CHARSET': 'utf8'           #编码
    }
}



# LANGUAGE_CODE = 'en-us'
# TIME_ZONE = 'UTC'

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'



### ###  mysite/mysite/__init__.py
#pip install pymysql

import pymysql
pymysql.install_as_MySQLdb()


#需要运行迁移数据 以更改管理员用户名和密码
python manage.py migrate

报错"raise RuntimeError"

sh 复制代码
报错信息为: data = sha2_rsa_encrypt(conn.password, conn.salt, conn.server_public_key)

File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\pymysql\_auth.py", line 143, in sha2_rsa

_encrypt

raise RuntimeError(

RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods

PS D:\PyCharm\Python Project\mysite> pip install cryptography

Collecting cryptography

解决方法: 安装cryptography包

pip install cryptography

建立默认admin数据模型

编写存放应用的数据模型,

官方文档: docs.djangoproject.com/zh-hans/4.1...

ini 复制代码
### ### mysite/myweb/models.py
from django.db import models

# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length=200.verbose_name='文章标题')
    pub_date = models.DateTimeField(verbose_name='发布日期')
    data = models.TextField(max_length=200.verbose_name='文章内容')

将模型注入到admin中

python 复制代码
### ### mysite/myweb/admin.py
from django.contrib import admin

# Register your models here.
from myweb.models import Article

# 设置admin界面展示的样式
class ArticleAdmin(admin.ModelAdmin):
    list_display = ("title","pub_date","data") #只展示一列必须加上","

admin.site.register(Article,ArticleAdmin)

效果如下:

更新model 同步数据

yaml 复制代码
## 更新models 再同步数据
$ Python manage.py makemigrations
Migrations for 'myweb':
  myweb\migrations\0001_initial.py
    - Create model Article


$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, myweb, sessions
Running migrations:
  Applying myweb.0001_initial... OK

创建管理页面的用户密码

perl 复制代码
#需要运行迁移数据 以更改管理员用户名和密码
python manage.py migrate

#编辑用户名和密码 【wei 123456】
$ python manage.py createsuperuser
Username (leave blank to use 'administrator'): wei

#创建一个超级用户来访问django 【admin  admin 123456】
$ python manage.py createsuperuser
Username (leave blank to use 'administrator'): admin
Password: 
Password (again):

添加app应用

ini 复制代码
### mysite/mysite/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bootstrap4',
    'myweb'                                #添加应用包括进去,使管理界面能够找到
]

设置DEBUG为False

ini 复制代码
### mysite/mysite/settings.py
# DEBUG = True  生产环境不可开启,设置为False
DEBUG = False

#设置DEBUG = False必须设置ALLOWED_HOSTS否则报错
ALLOWED_HOSTS = ["*"]

报错"CommandError:"

报错信息为:"CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False."

ini 复制代码
提示DEBUG为False时,必须设置settings.ALLOWED_HOSTS .

ALLOWED_HOSTS = [ 
        '.example.com', # Allow domain and subdomains
    '.example.com.', # Also allow FQDN and subdomains ]

或者需要设置任何用户均可以访问,那么可以这样设置:
ALLOWED_HOSTS = ['*']
复制代码
 

运行

 python manage.py  runserver 0.0.0.0:8080

访问

http://localhost:8080/

http://localhost:8080/myweb

http://localhost:8080/admin/

创建文章

删除文章

相关推荐
运维-大白同学13 分钟前
将django+vue项目发布部署到服务器
服务器·vue.js·django
喜欢猪猪15 分钟前
Django:从入门到精通
后端·python·django
陈王卜2 小时前
django+boostrap实现发布博客权限控制
java·前端·django
vener_20 小时前
LuckySheet协同编辑后端示例(Django+Channel,Websocket通信)
javascript·后端·python·websocket·django·luckysheet
mariokkm21 小时前
Django一分钟:django中收集关联对象关联数据的方法
android·django·sqlite
qq_q9922502771 天前
django宠物服务管理系统
数据库·django·宠物
无忧无虑Coding1 天前
pyinstall 打包Django程序
后端·python·django
qq_q9922502772 天前
django基于python 语言的酒店推荐系统
后端·python·django
codists2 天前
《Django 5 By Example》阅读笔记:p679-p765
python·django
冷琴19962 天前
基于python+django+vue.js开发的停车管理系统
vue.js·python·django