内容回顾

  1. django处理浏览器的请求流程:

    1. 请求发送到wsgi wsgi封装了请求的相关数据(request)

    2. django去匹配路径 根据路径判断要执行哪个函数

    3. 执行函数 函数执行具体的业务逻辑

    4. 函数返回响应 djgango返回 按照HTTP协议响应的格式进行返回

  2. 发请求的途径

    1. 在浏览器地址栏输入地址 回车 发出get请求

    2. a标签 发出get请求

    3. form表单 发出post请求

  3. get和post区别

    get 获取一个资源

    ?k1=v1&k2=v2 request.GET

    get请求没有请求体

post 提交数据

request.POST

数据在请求体中

  1. views.py

    def login(request):
    #业务逻辑

    return 响应

    HttpResponse('字符串') #返回一个字符串
    render(request,'模板的文件名',{'k1':v1...})
    redirect('地址')#重定向

    request.method   #请求方式 GET POST
  2. ORM

    models.py

    class Publisher(models.Model):
    name = models.CharField(max_lenth=32) #varchar(32)
       
    class Book(models.Model):
    name = models.CharField(max_lenth=32) #varchar(32)
       pub = modelsForeignKey(Publisher,on_delete=models.CASCADE)#一对多的对应关系 外键写在多的一个表中 表示和Publisher这个表又关系 第二个参数表示如果Publisher这个表中参数被删除 Book这个表中的数据也都被删除(默认的)
       """
      on_delete 2.0版本后是必须填的
      models.CASCADE 级联删除
      models.PROTECT 保护
      models.SET(v) 删除后设置为默认值
      models.SETDEFAULT 删除后设置为默认值
      models.SET_NULL 删除后设置为Null
      models.DOTHING 什么都不做
       
      """
       

    orm的操作

    from app01 import models
    models.Publisher.objects.all() # 获取所有的数据 QuerySet 对象列表
    models.Publisher.objects.get(name='xxx',id='1') #获取一条存在且唯一的数据 对象
    models.Publisher.objects.filter(name='xxx',id='1') #获取多条的数据 对象列表




    ret = models.Book.objects.all()#对象列表
    for book in ret:
    print(book)
    print(book.id,book.pk)
    print(book.name)
    print(boon.pub)  #书籍所关联的出版社的对象
    print(boon.pub_id)  #书籍所关联的出版社的id

    新增:

    models.Publisher.objects.create(name='xxx') #新增的对象

    models.Book.object.create(name='xxx',pub=出版社的对象) #新增的对象
    models.Book.object.create(name='xxx',pub=出版社的id) #新增的对象

    删除:

    models.Publisher.objects.get(pk=1).delete()
    models.Publisher.objects.filter(pk=1).delete() #删除对象列表 批量删除

    编辑:

    book_obj.name = 'xxx'
    book_obj.pub = 出版社对象
    book_obj.pub_id = 出版社的id
    book_obj.save() #保存到数据库


    models.Book.objects.filter(pk=1).update(name='xx',pub_id=出版社的id) #批量更新

    6.模板的语法

    return render(request,'模板的名称',{'k1':v1,'k2':v2...})

    {{ k1 }}   {{ k2 }}

    for

    {% for i in k1%}

    {{ forloop.counter }}
    {{ i }}

    {% endfor %}

    if
    {% if 条件 %}
    xxx
    {%   endif     %}


    {% if 条件1 %}
    xxx
    {% elif 条件2   %}
        xxx
    {% else %}
    xxx
    {%   endif     %}

    django基础回顾

    1. django相关命令

      • 下载安装

        pip install dajango==版本号 -i 国内源
      • 创建django项目

        django-admin startproject 项目名称	
      • 启动项目

        切换到项目的根路径

        python manage.py runserver 127.0.0.1:8080
        python manage.py runserver 80 127.0.0.1:80#改端口。
        python manage.py runserver 0.0.0.0:80 0.0.0.0:80#改地址。
      • 创建app

        python manage.py startapp app的名称
      • 数据库迁移的命令

        python manage.py makemigrations  #检测app下的model.py的变化  记录下变更记录
        python manage.py migrate #迁移 将变更记录同步到数据库中
      1. settings 配置

        BASE_DIR 项目的根目录

        INSTALLED APPS 注册的app

        MIDDLEWARE 中间件

        注释掉csrf的中间件 可以POST请求

        TEMPLATES 模板

        DIRS: [os.path.join(BASE_DIR,'templates')]

        DATABASES 数据库

        静态文件

        STATIC_URL = '/static/' #静态文件的别名

        STATICFILES_DIRS=[

        os.path.join(BASE_DIR,'static')

        ]

      2. django使用mysql数据库的流程

        1. 创建数据库

        2. 配置配置settings

          DATABASES = {
          'default': {
          'ENGINE': 'django.db.backends.mysql',
          'NAME': 'bookmanager',#数据库名称
          'HOST':'127.0.0.1',
          'PORT':3306,
          'USER':'root',
          'PASSWORD':'admin',
          }
          }
        3. 使用pymysql模块连接mysql数据库

          写在与项目同名的文件夹的__init__.py中:

          import pymysql
          pymysql.install_as_MySQLdb()
        4. 在app下的models.py中写入model(Model):

          from django import models
          class User(models.Model):# 表名 app的名称_user
          username = models.CharField(max_length=32)#varchar(32)
        5. 执行数据库命令

          python manage.py makemigrations  #检测app下的model.py的变化  记录下变更记录
          python manage.py migrate #迁移 将变更记录同步到数据库中
      3. urls.py路径和函数对应关系

        from django.conf.urls import url
        from django.contrib import admin
        from app01 import views urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^publisher_list/', views.publisher_list),
        url(r'^publisher_add/', views.publisher_add),
        url(r'^publisher_del/', views.publisher_del),
        url(r'^publisher_edit/', views.publisher_edit),
        ]
      4. 函数

        from django.shortcuts import render,redirect,HttpResponse
        def xxx(request):
        request.method 请求方式 GET POST
        request.GET #url上携带的参数 ?k1=v1&k2=v2 {} 推荐写法request.GET.get('k1')
        request.POST #post请求提交数据 {} #处理业务逻辑 #返回响应
        return 响应
        #HttpResponse('字符串')
        #render(request,'模板的文件名',{}) 返回一个HTML页面
        #redirect('地址') 重定向
      5. form表单

        1. form标签的属性 action地址 method=’post'

        2. input标签要有name属性 有些标签要有value

        3. 要有一个button按钮 或者 type='submit'的input

      6. ORM

        对象关系映射

        对应关系

        类-->> 表

        对象-->> 数据行

        属性-->>字段

        from django import models
        class User(models.Model):# 表名 app的名称_user
        username = models.CharField(max_length=32)#varchar(32)

django_day01的更多相关文章

  1. day18_雷神_django第一天

    # django_day01 1.http 协议 超文本传输协议,HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信. 协议概述 HTTP是一个客户端终端(用户)和服务器端( ...

随机推荐

  1. springboot2.7.x 集成log4j2配置写入日志到mysql自定义表格

    在阅读之前请先查看[springboot集成log4j2] 本文暂不考虑抽象等实现方式,只限于展示如何自定义配置log4j2并写入mysql数据库(自定义结构) 先看下log4j2的配置 <?x ...

  2. 深入理解Apache Hudi异步索引机制

    在我们之前的文章中,我们讨论了多模式索引的设计,这是一种用于Lakehouse架构的无服务器和高性能索引子系统,以提高查询和写入性能.在这篇博客中,我们讨论了构建如此强大的索引所需的机制,异步索引机制 ...

  3. SpringBoot之MongoDB附件操作

    前言 近期自己针对附件上传进一步学习,为了弥足项目中文件上传的漏洞,保证文件上传功能的健壮性和可用性,现在我将自己在这一块的心得总结如下: 一.pom.xml依赖的引入 <dependency& ...

  4. 常用类-Java比较器

    一.Comparable接口 Java中的对象,正常情况只能进行比较 == 或 !=不能使用 > 或 < 的,但是在实际开发中有需要进行对象的比较 comparable接口的使用举例: 1 ...

  5. dynamic + shardingsphere(4.1.1) 实现动态分库分表

    1. 主要依赖: <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-da ...

  6. Python List 中的append 和 extend 的区别

    方法的参数不同 append 方法是向原list的末尾添加一个对象(任意对象:如元组,字典,列表等),且只占据一个原list的索引位,添加后无返回值,直接在原列表中添加. list.append(ob ...

  7. kube-shell安装

    1.开源项目kube-shell可以为kubectl提供自动的命令提示和补全,对于初学kubernetes比较友好. https://github.com/cloudnativelabs/kube-s ...

  8. CDH集群日常

    1.交换内存告警 该告警通常就是使用了swap分区导致的,在生产环境中,如果服务器内存是256G:建议关闭swap分区,减少跟数据盘之间的交互: 2.修改swap阈值 任何:表示只要使用了swap分区 ...

  9. LyScript 获取上一条与下一条指令

    LyScript 插件默认并没有提供上一条与下一条汇编指令的获取功能,当然你可以使用LyScriptTools工具包直接调用内置命令得到,不过这种方式显然在效率上并不理想,我们需要在LyScript插 ...

  10. SkiaSharp 之 WPF 自绘 弹动小球(案例版)

    没想到粉丝对界面效果这么喜欢,接下来就尽量多来点特效,当然,特效也算是动画的一部分了.WPF里面已经包含了很多动画特效的功能支持了,但是,还是得自己实现,我这边就来个自绘实现的. 弹动小球 弹动小球是 ...