前端代码
下载后,打开终端,npm install ,然后 npm run dev 启动项目
utils文件中,url.js 配置了请求路径。 文件见:提取码 h2jx
项目搭建
环境配置
a、找个位置运行:python -m django startproject tkplat 项目名。
- 先搞个
虚拟环境
, 再安装django。 参考 - 创建项目之后,用pycharm打开,settings——project:tkplat——python interpreter解析器选到你的虚拟环境
b、gitee中,创建仓库, 名称和项目名字一样,叫tkplat (用gitee进行代码管理
)
c、项目中git init ,commit,push等推到gitee。
d、生成requirements.txt文件,进行包管理(pip freeze >> requirements.txt生成,pip install -r requirements.txt),文章后面我把它贴出来
- 先执行一次,看看效果,是否是新虚拟环境,git使用是否正常,
后续有装新的包,就重新生成一次requirements.txt
项目配置
settings中改时区
LANGUAGE_CODE = 'zh-hans' # 中文
TIME_ZONE = 'Asia/Shanghai' # 时区
USE_I18N = True # internationalization
USE_TZ = False # true 使用UTC时间,false 采用本地时区
django连接mysql
a、mysql环境(略) -网盘有傻瓜式windows版本mysql,注意连接时把时区选上不然连不上
b.创建库
CREATE DATABASE `tkplat` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
c .配置setting
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'tkplat', # 数据库名
'USER': 'root', # 用户名
'PASSWORD': 'sq', # 密码
'HOST': '127.0.0.1',
'PORT': '3306',
'TEST':{
'CHARSET': 'utf8',
'COLLATION': 'utf8_general_ci', }
}
}
执行迁移(往mysql中生成基础表)Tools- run manage.py task ,后, migrate (社区版就用 python manage.py migrate)
运行时发现,需要装python库mysqlclient ,用时对python库进行管理 pip freeze >> requirements.txt
执行成功后,
-
可以启动项目了看见
django火箭
了, (点右上角启动按钮 如果社区版想配置快捷启动参考启动配置或者python manage.py runserver)
配置之后,可以debug的方式运行,也可以不debug
-
基本表也生成了
跨域问题
(前端代码绑定了后端host后,去访问前端页面调后端接口时,会跨域)
当使用浏览器访问时,会提示跨域
解决:settings中进行配置
首先要安装:
'corsheaders.middleware.CorsMiddleware', # 跨域
# 配置跨域,如果为True,表示允许所有的域名跨域访问
CORS_ORIGIN_ALLOW_ALL = True
# 配置跨域, 允许所有的请求头
CORS_ALLOW_HEADERS = ('*')
配置之后,就成功了
app应用
使用python manage.py startapp system (后续使用这个时我直接省略前面的)
注意: 生成的一些新的文件,pycharm中是红色的,都给他git add,别忘记了,不然gitee中代码不全,我就犯了这个错误~~
settings中INSTALLED_APPS注册应用(略)
对于django不太熟练的,可以现在system中,models.py 写个简单的模型:
如下:
# 学生表(名字,性别)
class Student(models.Model):
GENDER_CHOICES = (
(1, "男"), # 前面是存储的值,后面是显示的值(admin页面显示的值)
(2, "女"),
)
name = models.CharField(max_length=100)
sex = models.SmallIntegerField(choices=GENDER_CHOICES, verbose_name="性别", null=True, blank=True, help_text="性别")
执行命令:makemigrations, 和migrate
数据库中就有了学生表
在system应用 的 admin.py 中, 访问admin页面(先creatsuperuser一个账号),也有了这个模型
from . import models
admin.site.register(models.Student)
如下图:就可以确认新增的应用已经成功了
重写User模型
先写一个模型基类。新建 utils包。 新建models.py, 其中定义可以公共使用的模型字段,如创建人,创建时间,更新时间,更新人,id等,
- 其中settings.AUTH_USER_MODEL,会报错,是因为没有配置
"""
@Remark: 自定义模型基类
"""
from django.db import models
from tkplat_django import settings # 项目配置文件(改成项目名)
# 2.模型抽象基类A
class BaseModel(models.Model):
# AutoField类型字段,自增长的IntegerField类型字段,primary_key=True表示主键【用这个好看点】
id = models.AutoField(primary_key=True, verbose_name="ID", help_text="ID")
# 2.关联字段_创建人
creator = models.ForeignKey(to=settings.AUTH_USER_MODEL, null=True, related_name="%(app_label)s_%(class)s_creator",
verbose_name='创建人', help_text="创建人", on_delete=models.SET_NULL, db_constraint=False)
# 3.其他字段
modifier = models.CharField(max_length=50, null=True, blank=True, help_text="修改人", verbose_name="修改人") # 填真实姓名
create_datetime = models.DateTimeField(auto_now_add=True, null=True, blank=True, help_text="创建时间",
verbose_name="创建时间")
update_datetime = models.DateTimeField(auto_now=True, null=True, blank=True, help_text="修改时间", verbose_name="修改时间")
desc = models.CharField(max_length=255, verbose_name="备注", null=True, blank=True, help_text="备注")
def __str__(self):
if hasattr(self, 'name'):
return self.name
#elif hasattr(self, 'url'):
#return self.url
else:
return self.desc
class Meta:
abstract = True
verbose_name = '基础模型'
verbose_name_plural = verbose_name
system应用中的models.py 中 , 新增用户模型, 并且继承模型基类
from django.db import models
from django.contrib.auth.models import AbstractUser
from utils.models import BaseModel
TABLE_PREFIX = "sys_" # 表前缀
# 2.用户表
class User(AbstractUser, BaseModel):
IDENTITY_CHOICES = (
(0, "超级管理员"),
(1, "系统管理员"),
(2, "普通用户"),
)
GENDER_CHOICES = (
(1, "男"), # 前面是存储的值,后面是显示的值(admin页面显示的值)
(2, "女"),
)
# 1.重写2个字段
username = models.CharField(max_length=50, unique=True, db_index=True, verbose_name='用户名', help_text="用户名")
email = models.EmailField(max_length=60, verbose_name="邮箱", null=True, blank=True, help_text="邮箱")
# 3.自定义字段
realname = models.CharField(max_length=30, verbose_name="真实姓名", help_text="真实姓名")
mobile = models.CharField(max_length=11, verbose_name="电话", null=True, blank=True, help_text="电话")
identity = models.SmallIntegerField(choices=IDENTITY_CHOICES, verbose_name="用户类型", null=True, blank=True, default=1,
help_text="用户类型")
avatar = models