Dajngo项目流程
1. 创建项目
Django-admin startproject 项目名
2. cd 项目 创建子应用
Python manage.py startapp 子项目名
3. 把项目添加到编辑器
4. 进入主项目的setting.py文件配置
(1) INSTALLED_APPS里面添加子项目的名字
(2) MIDDLEWARE把这里面的跨域请求注释掉
(3) TEMPLATES—>'DIRS': [os.path.join(BASE_DIR,'templates')],
(4) 想用mysql先创建个数据库
然后配置 记得改数据库名称 和密码
DATABASES = {
'default': {
#连接mysql
'ENGINE': 'django.db.backends.mysql',
#数据库名称
'NAME': 's2',
#数据库用户
'USER':'root',
#密码
'PASSWORD':'mysql',
#ip 不填默认localhost
'HOST':'',
#端口 不填 默认就是3306
'PORT':'',
#数据库配置
#自动提交
'OPTIONS':{'autocommit':True}
}
}
然后在主项目的__init__.py文件下
#导包
import pymysql
#进行初始化
pymysql.install_as_MySQLdb()
(5) 如果用sqlite3
python manage.py migrate 迁移自带的数据库
随后Python manage.py createsuperuser注册admin账户
(6) 把语言时区改了
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
(7) 添加
STATICFILES_DIRS =(
os.path.join(BASE_DIR, 'static'),
)
5. 随后在大的项目下创建tamplate和static文件夹
6. 路由分发
7. 把主项目的urls.py复制在子项目里面 把子项目的urls.py里面的path('admin/', admin.site.urls),删了 导入子项目的views文件
8. 然后看题目要求 用到的数据库类型
(1) 一对一 数据库外键类型OneToOneField(to, on_delete, parent_link=False, options)
(2) 一对多 数据库类型
保留原数据ForeignKey(关联表名,null=True,on_delete=models.SET_NULL)
不保留原数据ForeignKey(关联表名,null=True,on_delete=models.CASCADE)
(3) 多对多 数据类型.ManyToManyField(关联表名)
(4) Mysql数据库的话 后面跟上这个 在mysql数据库下能看到你建的表名 不跟也行
class Meta:
db_table = 'user'
(5) Sqlite3 跟上这个 在admin后台能看只管的看到你用的啥表
class Meta:
verbose_name_plural = '自定义的表名'
def __str__(self):
return self.name
然后再子项目的admin.py里面导入你的models.py文件
From 子项目名 import models
admin.site.register(models.表名)
9. 表建好之后在template文件夹下写模板 记住几点
(1) form表单提交要在form标签里面写上action 里面是你要提交的路径 method是你以POST还是GET方式提交 如果用到上传图片写enctype="multipart/form-data"然后要写name值之后传到后端获取数据的时候要用到 记得写上一个提交按钮
10. 在子项目的views.py文件下写后端代码(接口)
(1) 导模块
from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse
from myapp.models import * 这个是数据库模块
(2) 起名字的时候最好首字母大写 标准规范
(3) 之后就是写接口 记得一个接口一个路由
(4) 获取前台的name值
Request.PSOT/GET.get(‘前端的name值’)
获取图片
fp=Request.FILES.get(‘前端的name值’)(记得要在static里面建一个img文件夹)
获取图片的时候要 导包
from 主项目.settings import STATICFILES_DIRS
import os
import hashlib
import time
Md5加密
def get_md5(str_):
m = hashlib.md5()
m.update(str_.encode())
return m.hexdigest()
在普通视图下写时间 把时间加在md5加密下面
now = time.time()
file_name = get_md5(str(now))
之后判断
fp=Request.FILES.get(‘前端的name值’)(记得要在static里面建一个img文件夹)
if fp:
houzhui = fp.name.split(".")[-1]
path = os.path.join(STATICFILES_DIRS[0], 'img/' + file_name + '.' + houzhui)
if fp.multiple_chunks():
file_yield = fp.chunks()
with open(path, 'wb') as f:
for buf in file_yield:
f.write(buf)
else:
print('大文件上传完毕')
else:
with open(path, 'wb') as f:
f.write(fp.read())
print('小文件上传完毕')
Shop.objects.create(user=res1,name=name,price=price,picture=('img/' + file_name + '.' + houzhui))
return redirect(reverse('zhanshi'))
else:
return HttpResponse('上传失败')
大致流程就是那样