Django框架知识点简单总结(1)

创建第一个项目

django-admin startproject django_hello

开启测试服务器

python manage.py runserver abc.com:8000 abc.com:9000 NO 跨域请求 ajax a.abc.com b.abc.com YES

项目目录结构

  • __init__.py: 声明当前文件夹为一个可导入的包

  • settings.py: 整个项目的配置文件

  • urls.py: 主控路由映射文件

  • wsgi.py: 项目上线时使用的uwsgi服务器的连接文件

  • manage.py: 控制管理当前项目

配置信息修改

ALLOWED_HOSTS = ["*"] 谁可以访问我 ANGUAGE_CODE = 'zh-Hans' 语言 TIME_ZONE = 'Asia/Shanghai' 时区

创建子app

python manage.py startapp( app名字)

子app目录结构

  • admin.py: django内置了一个数据库管理工具

  • models.py: 数据库,模型类

  • views.py: 存储不同

django组件探究

返回HTML页面,模板页面

  • 保存模板页面 TEMPLATES->'DIRS': [os.path.join(BASE_DIR,'template')],

静态资源 settings-> STATICFILES_DIRS -> (os.path.join(BASE_DIR,'static'),)

表单提交

    1. 第一步,用户GET方法访问 拿到表单

    1. 输入表单 POST提交

    1. 当表单为多值情况,get方法只能获取到最后一个数,如果想获取到全部的要用getlist

建表数据迁移

python manage.py makemigrations

创建表

python manage.py migrate

 

 

自定义标签

  • 可以支持无限参数,

  • 过滤器:{{ var|fitler:var1}}

  • 标签:{% url arg1 arg2 ... %}

 

django操作数据库的增删改查

  • 查询

    • objects.all():获取表中所有数据

      • 结果集

    • objects.filter()

      • 支持链式查询:用字段__条件

      • 条件:startswith endswith gte lte gt lt

      • equal:相等的意思

    • objects.exclude()

    • objects.get()

      • 多个结果报错:modelapp.models.MultipleObjectsReturned: get() returned more than one Babe -- it returned 2!

      • modelapp.models.DoesNotExist: Babe matching query does not exist.

        • 数据表没数据

        • 没迁移

    • objects.order_by()

    • objects.count()

    • objects.values()

  • 改:

    • 先要查询到你要改谁

    • 接着在内存中 res.filed = other res.save()

    • res.update()

  • 删除:

    • res.delete()

    • queryset.delete()

     

一对一的增删改查

  • 创建:

    • 关联关系的数据创建

    • 先得把那个关联的值创建出来

    • 然后再赋值到这个字段上

      • m1 = Man

      • f1 = Father(man=m1)

  • 查询

    • 从表的层面:

      • 从Father查。名字是李四的父亲

        • Father(man__字段名='')

        • res = models.Father.objects.filter(man__name__startswith='李')

      • 查询所有小孩名为聪明的小孩的父亲

        • res = models.Father.objects.filter(babe__startswith='聪明')

    • 从数据的层面:

      • 获取到一个Father数据的Man数据

        • res.man.name

      • 获取一个Man是不是一个Father

        • 不能的:OneToOneField

  • 改:

    • 找一个关联字段的同类数据

    • 直接赋值即可,记得save

  • 删:

    • on_delete=models.SET_NULL

      • 关联数据删除,本数据不动

    • on_delete=models.CASCADE

      • 关联数据删除,全部删除

多对一的增删改查

    • 首先创建老师数据

      • t1 = models.Teacher.objects.create(name='赵老师')

    • 再创建学生数据

      • s1 = models.Student.objects.create(teacher=t1,name='张同学')

  • 查询:

    • 表层面:

    • 查询所有赵老师的学生

      • models.Student.objects.filter(teacher__name='赵老师')

      • 正向查询

    • 带张同学的老师:

      • models.Teacher.objects.filter(student__name='张同学')

      • 反向查询

    • 数据层面:

      • 张同学的老师:正向查询

        • s1.teacher

      • 李老师的全部学生:反向查询

        • student_set == Student.objects

  • 改:

    • 字段赋值再save

  • 删:

    • 直接delete,根据on_delete属性设置,做不同的动作

    • 将赵老师的所有学生删除

      • t1.student_set.all().delete()

      • models.Teacher.objects.all().delete()

 

  • http协议:无状态协议

  • 服务端 - 客户端

    • 短链接:无法保存客户端状态

HTTP

HTTPS

  • COOKIE保存在哪里?客户端

    • 明文暴露给客户端

    • 设置COOKIE:

      • res = HttpResponse

        • res.set_cookie(key, value , max_age=)

        • res.set_cookie(key, value , max_age=)

        • 默认的COOKIE有效期是多久?

        • 关闭浏览器,COOKIE即消失

      • render

      • redirect

    • 获取COOKIE:

      • request.COOKIES.get(key)

猜你喜欢

转载自www.cnblogs.com/huanghaobing/p/10840419.html