内容回顾

  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. C语言学习之我见-strncat()可调整的字符串拼接函数

    strncat()函数,用于两个字符串的拼接. (1)函数原型 char * strncat(char * Dest,const char * Source,size_t _Count)` (2)头文 ...

  2. JS:Array

    js有五种基本数据类型:string,number,boolean,null,undefined 一种引用类型,包括:1.Object类型:2.Function类型:3.Array类型:4.RegEx ...

  3. 分享自己平时使用的socket多客户端通信的代码技术点和软件使用

    前言 说到linux下多进程通信,有好几种,之前也在喵哥的公众号回复过,这里再拿出来,重新写一遍:多进程通信有管道,而管道分为匿名和命名管道 ,后者比前者优势在于可以进行无亲缘进程通信:此外信号也是进 ...

  4. 全网求解,用Python处理一个基础题目

    昨天在群里看见一个Python的问题,趁着今天有那么一点点时间,就想把这个题目分享出来,让大家一起解决.毕竟三个臭皮匠,赛过诸葛亮.原始数据如下: 1 origin_lst = [0, 0, 1, 2 ...

  5. GameFramework食用指南

    1.框架简介 GF框架分两部分,GameFramework(GF)和UnityGameFramework(UGF): 通过接口的形式对Unity引擎进行了解耦: GF独立于Unity,具体业务逻辑实现 ...

  6. NC18979 毒瘤xor

    NC18979 毒瘤xor 题目 题目描述 小a有 \(N\) 个数 \(a_1, a_2, ..., a_N\) ,给出 \(q\) 个询问,每次询问给出区间 \([L, R]\) ,现在请你找到一 ...

  7. 经典的损失函数:交叉熵和MSE

    经典的损失函数: ①交叉熵(分类问题):判断一个输出向量和期望向量有多接近.交叉熵刻画了两个概率分布之间的距离,他是分类问题中使用比较广泛的一种损失函数.概率分布刻画了不同事件发生的概率. 熵的定义: ...

  8. C++指针和结构体基础知识

    学习C++首先要回忆起C语言当中的指针和结构体知识,本文作者将通过一段代码来总结指针和结构体基础知识:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使 ...

  9. SpringBoot接口 - API接口有哪些不安全的因素?如何对接口进行签名?

    在以SpringBoot开发后台API接口时,会存在哪些接口不安全的因素呢?通常如何去解决的呢?本文主要介绍API接口有不安全的因素以及常见的保证接口安全的方式,重点实践如何对接口进行签名.@pdai ...

  10. Eslint 项目笔记

    1.代码下一行不要验证报错 代码的上一行打上注释 <--eslint-disable-next-line-->