内容回顾

  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. 龙芯发布 .NET 6 SDK 6.0.105-ea1 LoongArch64 版本

    龙芯平台.NET,是龙芯公司基于开源社区.NET独立研发适配的龙芯版本,我们会长期进行安全更新和错误修复,并持续进行性能优化.社区.NET7版本开始已经原生支持LoongArch64架构源码.具备如下 ...

  2. v-if和v-for哪个优先级更高?

    首先在实际开发阶段,不应该把v-if和v-for在同一个标签中使用, 在vue2中,v-for的优先级是高于v-if的,如果同时出现,每次渲染都会先执行循环再判断条件,无论如何循环都不可避免,浪费了性 ...

  3. 你要的几个JS实用工具函数(持续更新)

    今天,我们来总结下我们平常使用的工具函数,希望对大家有用.1.封装fetch 源码: /** * 封装fetch函数,用Promise做回调 * @type {{get: (function(*=)) ...

  4. ansible在linux和windows批量部署zabbix-agent2

    --- - hosts: linux tasks: - name: copy centos 7 zabbix-agent2 copy: src=zabbix-agent2-5.0.11-1.el7.x ...

  5. 一文看完vue3的变化之处

    在通读了vue的官网文档后,我记录下了如下这些相对于2.x的变化之处. 1.创建应用实例的变化 之前一般是这样: let app = new Vue({ // ...一些选项 template: '' ...

  6. FileNameFilter过滤器的使用和Lambda优化程序--IO概述(概念&分类)

    FileNameFilter过滤器的使用和Lambda优化程序 public class Demo02Filter { public static void main(String[] args) { ...

  7. DENIED Redis is running in protected mode because protected mode is enabled

    DENIED Redis is running in protected mode because protected mode is enabled redisson连接错误 Unable to i ...

  8. Vue生命周期和MVVM框架

    生命周期 组件从开始到结束的全过程 创建阶段:beforeCreate.created 挂载阶段:beforeMount.mounted 更新阶段:beforeUpdate.updated 销毁阶段: ...

  9. ooday02构造方法_this_引用类型数组

    笔记: 构造方法:构造函数.构造器.构建器---------复用给成员变量赋初值代码 作用:给成员变量赋初始值 与类同名,没有返回值类型(连void都没有) 在创建(new)对象时被自动调用 若自己不 ...

  10. Keep In Line_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语 ...