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本身包含认证信息

posted @ 2022-11-08 21:10  z5onk0  阅读(58)  评论(0编辑  收藏  举报