赞
踩
该项目手把手一步一步来搭建学习如何使用django3.0和mysql搭建我们常见的一个日报系统, 该系统的功能包括, 用户的注册,激活,登录,日报的编辑, 查看;
该项目可以学习到的知识有 Django,mysql,PHP,django,docker等
因此综合性较强
所有的细节已经在代码的后面加以注释
最后所有的代码已经开源到了gitee
点击自动跳转nwu_zjq/django3.0.git
本节代码01_模板创建
话归正传
python conda环境搭建具体请点击此处
mysql环境搭建具体请点击此处
conda create -n dj_test python=3.6 # 安装环境
source activate dj_test # 进入环境
pip install -r requirements.txt # 安装必要的包
(dj_test) zjq@DESKTOP-2RLT53L:dj3_test$ django-admin startproject submission # 创建project
(dj_test) zjq@DESKTOP-2RLT53L:dj3_test$ cd submission/ # 进入project
(dj_test) zjq@DESKTOP-2RLT53L:submission$ python manage.py startapp user # 创建app
(dj_test) zjq@DESKTOP-2RLT53L:submission$ mkdir apps #
(dj_test) zjq@DESKTOP-2RLT53L:submission$ mv user apps
(dj_test) zjq@DESKTOP-2RLT53L:submission$ mkdir template # 模板,将来会将所有的html页面展示放入
(dj_test) zjq@DESKTOP-2RLT53L:submission$ mkdir static # 静态数据, 比如模板中需要用到的格式,图片等
(dj_test) zjq@DESKTOP-2RLT53L:submission$ mysql -u root -p # 进入数据库
mysql> create database dj3_test default character set utf8; # 创建数据库为dj3_test, 作为该项目的数据库用来保存数据
Query OK, 1 row affected (0.01 sec)
mysql> exit;
其中requirements.txt的内容如下
asgiref==3.3.0 attrs==20.2.0 autobahn==20.7.1 Automat==20.2.0 certifi==2016.2.28 cffi==1.14.3 constantly==15.1.0 cryptography==3.2 daphne==2.5.0 Django==3.0 django-tinymce==2.6.0 hyperlink==20.0.1 idna==2.10 incremental==17.5.0 itsdangerous==1.1.0 pyasn1==0.4.8 pyasn1-modules==0.2.8 pycparser==2.20 PyHamcrest==2.0.2 PyMySQL==0.10.1 pyOpenSSL==19.1.0 pytz==2020.1 service-identity==18.1.0 six==1.15.0 sqlparse==0.4.1 tvm==0.8.dev0 Twisted==20.3.0 txaio==20.4.1 zope.interface==5.1.2
import pymysql # 因为这里用到的是mysql
pymysql.install_as_MySQLdb()
import os import sys # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # add by zjq sys.path.insert(0, os.path.join(BASE_DIR, "apps")) # 让工程能够识别apps文件夹 AUTH_USER_MODEL="user.User" # 主表 LOGIN_IP = "10.15.14.146" # 主机的服务IP save_root = "/mnt/e/05_Django/upload1/" # 文件保存的位置 # 数据库的配置 # 下面参数如果不改也是可以的, 不改默认使用数据库sqlite3, 这样就不需要配置mysql了 DATABASES = { 'default': { # 默认数据库 # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # zjq 配置mysql 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dj3_test', # 注意这个数据库通过root用户需要新建 'HOST':'localhost', 'USER':'root', 'PASSWORD':'zjq', # 075290 'PORT':3306, # 默认不用加 } } # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '5=753t()55@7(_1hlbg7^fi8cd6-7zqxtxjs_gtxi=aumna@#j' DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ "tinymce", # add by zjq 增加富文本框 "user", #add zjq, 因为增加了apps的路径,因此这里不需要再使用apps.user 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', # add by zqj, 不然在使用form请求会出现验证失败的问题 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'submission.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ os.path.join(BASE_DIR, "template".replace("\\",'/')), # add by zjq 增加template文件夹 ], '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', ], }, }, ] WSGI_APPLICATION = 'submission.wsgi.application' # Database # https://docs.djangoproject.com/en/3.0/ref/settings/#databases # Password validation # https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # add by zjq LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static".replace("\\", "/")), # 添加静态文件加的路径到工程 ) # add by zjq 添加富文本编辑器配置文件 TINYMCE_DEFAULT_CONFIG = { 'theme': 'advanced', # 高级主题, 下面是高宽 'width': 600, 'height': 400, } # add by zjq 邮件配置 # 发送邮件配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' # EMAIL_USE_TLS = False # smpt服务地址 EMAIL_HOST = 'smtp.qq.com' EMAIL_PORT = 25 # 发件邮箱 EMAIL_HOST_USER = 'xxx@qq.com' # 授权密码 EMAIL_HOST_PASSWORD = 'ypimwpgvjmtfbgjj' # 收件人看到的发件人信息 EMAIL_FROM = 'nisl lab812<xxx@qq.com>' #配置登录地址 LOGIN_URL = "/user/login"
from django.db import models
class BaseModel(models.Model):
"""抽象模型基类"""
create_time = models.DateTimeField(auto_now_add=True, verbose_name = "创建时间")
update_time = models.DateTimeField(auto_now=True, verbose_name = "更新时间")
class Meta (object):
"""说明抽象模型类 """
abstract = True
apps/user/models.py
用来创建用户表from django.db import models
from django.conf import settings
from django.contrib.auth.models import AbstractUser #用户验证
from db.base_model import BaseModel
from django.db import models
from tinymce.models import HTMLField
class User(AbstractUser, BaseModel):
'''用户模型类'''
class Meta:
db_table = 'user'
verbose_name = '用户'
verbose_name_plural = verbose_name
apps/user/admin.py
用来配置显示用户的格式class User(AbstractUser, BaseModel):
school_number = models.CharField(default="0000", max_length=12,verbose_name = "学号" )
is_manager = models.BooleanField(default=True, verbose_name='是否为管理员')
'''用户模型类'''
class Meta:
db_table = 'user'
verbose_name = '用户'
verbose_name_plural = verbose_name
$ python manage.py makemigrations # 确定修改的数据库
Migrations for 'user':
apps/user/migrations/0001_initial.py
- Create model User
python manage.py migrate # 同步
(dj_test) zjq@DESKTOP-2RLT53L:submission$ python manage.py createsuperuser # 创建管理员账户
用户名: zjq
电子邮件地址: xxx@qq.com
Password:
Password (again):
Superuser created successfully.
$ python manage.py runserver # 运行
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
November 05, 2020 - 20:55:10
Django version 3.0, using settings 'submission.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C. # 到这里就可以通过浏览器访问http://127.0.0.1:8000/了
python manage.py runserver 0:10086 # 这里的运行命令表示所有的IP都可以通过本地IP:10086访问该project, 比如我的IP地址是10.15.14.146, 我就可以使用http://10.15.14.146:10086/访问
如果没有问题, 到此, django的基础框架就配置完毕, 接下来开始进行用户界面的配置, 注册, 登录
到此, 整个project的文件结构如下
(dj_test)$ tree ├── apps │ └── user │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── __init__.py │ ├── models.py # 创建对应的数据库表 │ ├── tests.py │ └── views.py # url请求处理中心 ├── db │ └── base_model.py # 数据库父类 ├── db.sqlite3 #默认sqlite3的数据库 ├── manage.py # 主函数 ├── static # 存放静态文件的文件夹 ├── submission │ ├── __init__.py │ ├── asgi.py │ ├── settings.py # 整个服务器的配置文件 │ ├── urls.py # 请求先通过这里 │ └── wsgi.py └── template # 页面显示的模板, 所有的html都在这里 11 directories, 26 files
git clone https://gitee.com/nwu_zjq/django3.0.git
cd django3.0/01_模板创建/
source activate dj3
# 第一次需要
数据库创建dj_test
python manage.py makemigrations # 同步数据库
python manage.py migrate # 同步数据库
python manage.py createsuperuser # 创建超级管理员
# 运行
python manage.py runserver
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。