Django读书笔记
模型建立
-
PDMan设计表,导出sql文件
-
mysql导入sql文件
use database_name; set names utf8; source sql文件路径
-
将sqlite3改为连接mysql,在settings.py中修改
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '127.0.0.1', 'PORT': '3306', } }
-
反向生成Django模型
python manage.py inspectdb > models.py
-
如果提示mysqldb报错(python3已停止支持),则改为使用pymysql,在_init_.py中加入
import pymysql pymysql.install_as_MySQLdb()
-
创建应用
-
创建项目
django-admin startproject BookStore
-
创建应用
python manage.py startapp goods
- 新建apps文件夹,将goods应用目录拷如apps文件夹
-
配置应用
-
在settings.py中加入
INSTALLED_APPS = [ 'apps.goods', ]
-
如果遇到如下报错,需要修改每个应用下的admin.py文件,将name字段名字前加上
apps
django.core.exceptions.ImproperlyConfigured: Cannot import 'basic'. Check that 'apps.basic.apps.Basi
-
-
创建应用对应模型
- 在apps/goods/models.py中加入模型类
创建后台
-
数据库迁移
python manage.py makemigrations python manage.py migrate
- 注意,如果改动表以后想要重新迁移,需要做如下几个改动
- 删除应用下的migrations/xxx_initial.py
- 删除应用在django_migrations内的记录
- 如果模型是反向生成的,需要将class Meta内部类的managed字段置为True
- 如果上述方法还不行,将所有表删掉,重新迁移
- 注意,如果改动表以后想要重新迁移,需要做如下几个改动
-
创建超级用户
python manage.py createsuperuser
-
此时可以登录admin后台
-
如果遇到以下问题,需要编辑 settings.py 文件,从
INSTALLED_APPS
配置项中移除'django.contrib.sites'
django.contrib.sites.models.Site.DoesNotExist: Site matching query does not exist.
-
-
后台改为中文显示,在settings.py中修改为
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai'
MEDIA_URL="/media/"
MEDIA_ROOT=os.path.join(BASE_DIR,"media")
设置静态文件
-
包括static和media两类,static包含css\js\image,media指媒体文件,比如用户上传的文件
-
要使用静态文件,需要修改setting.py和路由
表单
- html表单:配置路由,视图函数中判断为GET请求时,跳转到表单html,通过action提交给视图函数,视图函数判断为POST请求时,通过request.POST方法获取提交数据,处理后渲染到表单html
- form表单:新建form.py,自定义一个表单类,设置字段,在视图函数中接收request.POST并实例化为myform,通过form_obj:myform键值对传给模板,模板通过form_obj.as_p接收表单对象
- ModelForm表单:通过关联木星,设置要显示的字段并过滤输入,通过clean局部和全局钩子对提交输入进行校验,在视图函数中接收request.POST并实例化,通过save方法保存到数据库,或者通过键值对将实例传递给模板显示
- Ajax表单:click方法回调ajax请求,url是表单提交的地址,通过视图函数处理后返回json数据
模板继承
- 母版页和内容页
#定义父模板可被重写内容
{%block block_name%}
...可以被子模板覆盖的内容
{%endblock block_name%}
#继承父模板
{% extends '父模板名称' %}
#子模板重写父模板
{%block block_name%}
...子模板覆盖后呈现的新内容
{%endblock block_name%}
bootstrap做网页美化
-
bootstrap是个前端框架,需引入static和templates来使用
-
实例:
- AdminLTE 后台管理模板
- bootstrap-table插件美化表格,html里需要提供参数queryParams,视图函数里获取参数,并返回查询值
RESTful接口
前后端分离
- 前后端通过接口分离:前端获取静态页面后,通过接口获取数据,根据js在前端实现渲染,而不是借由模板在后端完成数据填充后再返回给前端
RESTful接口规范
- 数据格式
- API名字
- 请求方式:接口的post/get/put/delete方法
序列化
-
内存中的数据通过序列化转化为本地存储或者网络传输的形式,通常使用json格式
-
借助DRF框架的序列化类和序列化模型类,对queryset进行序列化处理
接口开发
- DRF框架中的Request类和Response类,用于获取和返回序列化数据
- 用@api_view装饰器,确保视图函数可以使用Request和Response
- 或者用APIView类实现接口,可以定义get\post\put\delete方法,并且使用的是DRF框架中的request和response
接口安全
-
基于DRF框架的Token认证
- 用户登录应用先生成一个Token,设置接口权限,访问接口时在header authorization字段要带Token
-
基于DRF框架的JWT认证
- 基本格式,登录后由服务器签发,存在cookie中,再次交互时带authorization访问,可设置接口访问权限
-
二者区别:Token是在服务器数据库上比对,JWT本身包含认证信息