Django

  1. 下载安装

    1. 命令行

      pip install django==1.11.26 -i 源

    2. pycharm

  2. 创建项目

    1. 命令行

      django-admin startproject 项目名

    2. pycharm

      file ——》 new project ——》 django ——》 输入项目路径 ——》 选择解释器 ——》 输入一个app的名称 ——》 create

  3. 启动项目

    1. 命令行

      cd 项目的根目录

      python manage.py runserver # 127.0.0.1:8000

      python manage.py runserver 80 # 127.0.0.1:80

      python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80

    2. pycharm

      点绿三角 (没有右键启动)

  4. settings的配置

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

    静态文件的配置:

    STATIC_URL = '/static/'

    STATICFILES_DIRS = [

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

    ]

    DATABASES 数据库

    INSTALLED_APPS = []

    TEMPLATES 模板 DIRS = [os.path.join(BASE_DIR,'templates')]

  5. APP

    创建APP

    python manage.py startapp app名

    注册APP

    INSTALLED_APPS = [

    'app名'

    或者

    'app名.apps.类' # 'app01.apps.App01Config',

    ]

  6. urls.py

     from app01 import views
     ​
     urlpatterns = [
     
         url(r'^publisher/',views.publisher),
         url(r'^add_publisher/',views.add_publisher),
         url(r'^del_publisher/',views.del_publisher),
         url(r'^edit_publisher/',views.edit_publisher),
     ]
  7. views.py

     from django.shotcuts import HttpResponse,render,redirect
     ​
     def publisher(request):
      # 业务逻辑
      # 返回响应
      # HttpResponse('字符串')   # 返回的是字符串
      # render(request,'模板的名字',{'k1':v1})   # 返回的一个页面
      # redirect('路径')   # 重定向
     ​
  8. 模板语法

      render(request,'pub.html',{'all_publishers':all_publishers}) 
     {{ all_publishers }}
     ​
     {% for i in all_publishers %}
     ​
      {{ forloop.counter }}
      {{ i }}
      {{ i.id }} {{ i.pk }}
      {{ i.name }}
     
     {% endfor %}
     ​
     ​
  9. form的注意点:

    1. form标签的属性 action='提交的地址' method='post' novalidate 取消input标签自带的校验

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

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

  10. get 和 post

    get : 获取一个页面

    途径:

     1. 直接在浏览器的地址栏中输入地址 回车
    1. form表单 不指定method

    2. a标签

    参数: ?k1=v1&k2=v2

    获取参数: request.GET.get('k1')

    post : 提交数据

    途径:

     1. form表单  method = 'post'

    获取数据: request.POST.get('k1')

  11. Django使用MySQL数据库的流程:

    1. 手动创建一个MySQL数据库

    2. 配置数据库

       ENGINE   MySQL
       NAME 数据库的名字
       HOST   ip
       PORT   3306
       USER   用户名
       PASSWORD 密码
    3. 在与settings同级目录下的__init__.py中写代码:

       import pymysql
       pymysql.install_as_MySQLdb()
    4. 写models:

       form django.db import models 
       class Publisher(models.Model):
        name = models.CharField(max_length=32)
       ​
    5. 执行迁移的命令

       python  manage.py  makemigrations  # 检查已经注册的APP下面的models.py的变更情况
       python manage.py migrate   # 执行迁移
    6. ORM

      对象关系映射

      对应关系:

      类 _> 表

      对象 _> 数据行(记录)

      属性 _> 字段

      ORM能做的事情:

      1. 对数据做修改

      2. 对表做修改

      ORM的操作

       from app01 import models 
       ​
       # 查询
       models.Publisher.objects.all()  # 查询所有的数据 QuerySet 对象列表
       models.Publisher.objects.get(name='xxx')  # 查询一条数据 只能查有且唯一的数据
       models.Publisher.objects.filter(name='xxx')  # 查询所有满足条件的数据 对象列表
       ​
       # 新增
       obj = models.Publisher.objects.create(name='xxxx')
       ​
       obj = models.Publisher(name='xxxx')
       obj.save()  # 保存到数据库
       ​
       # 删除
       models.Publisher.objects.filter(pk=pk).delete()   # 批量删除
       models.Publisher.objects.get(pk=pk).delete() # 单条数据的删除
       ​
       ​
       # 更新
       models.Publisher.objects.filter(pk=pk).update(name='xx')  # 批量更新
       ​
       obj = models.Publisher.objects.get(pk=pk)
       obj.name = 'xxxx'
       obj.save()  # 保存到数据库

    外键

    一对多的关系

     ​
     class Book(models.Model):
         name = models.CharField(max_length=32)
         pub = models.ForeignKey('Publisher', on_delete=models.CASCADE)
       
     
         """
        on_delete 在2.0版本之后是必填的
        on_delete=
            models.CASCADE 级联删除
            PROTECT   保护
            SET(1)    
            SET_DEFAULT 设置为默认值设置为某一个值
            SET_NULL   设置为空
            DO_NOTHING 什么都不变
        """
         

    查询

     all_books = models.Book.objects.all()
     
     for book in all_books:
         print(book)
         print(book.id)
         print(book.pk)
         print(book.name)
         print(book.pub)  # 所关联的出版社对象   对象.外键
         print(book.pub_id)  # 所关联的出版社对象的id   对象.外键_id

    新增

     models.Book.objects.create(name=book_name,pub=models.Publisher.objects.get(pk=pub_id))
     obj = models.Book.objects.create(name=book_name, pub_id=pub_id)

    编辑

     book_obj.name = book_name
     book_obj.pub_id = pub_id
     # book_obj.pub = 出版社的对象
     book_obj.save()
     models.Book.objects.filter(pk=pk).update(name=book_name,pub_id=pub_id)

django内容回顾:的更多相关文章

  1. Django 内容回顾

    模板 变量 {{ }} 标签 {% %} if elif else for empty forloop() with...as csrf_token 过滤器 default length add da ...

  2. python 全栈开发,Day72(昨日作业讲解,昨日内容回顾,Django多表创建)

    昨日作业讲解 1.图书管理系统 实现功能:book单表的增删改查 1.1 新建一个项目bms,创建应用book.过程略... 1.2 手动创建static目录,并在目录里面创建css文件夹,修改set ...

  3. python 全栈开发,Day112(内容回顾,单例模式,路由系统,stark组件)

    一.内容回顾 类可否作为字典的key 初级 举例: class Foo(object): pass _registry = { Foo:123 } print(_registry) 执行输出: {&l ...

  4. django知识点回顾与补充

    一.django知识点回顾 1.Cookie操作 - 客户端本地存储的键值对 2.Session操作 - 3.URL路由 - /index -> view.函数 4.MTV 5.View中返回方 ...

  5. 04 DRF内容回顾、用户登录 (含跨域) (vuex vue-cookie)、用户认证 (Auth认证)(拦截器)

    1.内容回顾 1.视图中常见的继承 2.频率访问控制源码 3.序列化,反序列化 2.初始化代码 1.后端代码:AuthView (1)目录结构 (2)urls (3)view (4)注释掉cors ( ...

  6. 基本数据类型-集合(set)_上周内容回顾(字符串_数字_列表_元组_字典_集合)

    上周内容回顾 1.字符串 2.数字 除了布尔类型外,int.long.float和complex都可以使用的运算为:加.减.乘.除.整除.幂运算和取余 3.列表和元组 列表的内容可变,可以包含任意对象 ...

  7. Netty源码分析第4章(pipeline)---->第7节: 前章节内容回顾

    Netty源码分析第四章: pipeline 第七节: 前章节内容回顾 我们在第一章和第三章中, 遗留了很多有关事件传输的相关逻辑, 这里带大家一一回顾 首先看两个问题: 1.在客户端接入的时候, N ...

  8. Python并发编程内容回顾

    Python并发编程内容回顾 并发编程小结 目录 • 一.到底什么是线程?什么是进程? • 二.Python多线程情况下: • 三.Python多进程的情况下: • 四.为什么有这把GIL锁? • 五 ...

  9. JavaScript内容回顾

    <!DOCTYPE html> <!--JavaScript内容回顾--> <html lang="en"> <head> < ...

随机推荐

  1. 整理几个经常在H5移动端开发遇到的东西。

    本篇主要是我个人的学习分享. 1.弹出数字键盘 <!-- 有“#” “*” 符号输入 --> <input type="tel"> <!-- 纯数字 ...

  2. SpringCloud单元测试【六】

    SpringCloud的单元测试主要是依靠 Mock以及Mockito, 所以我们需要对Mock以及Mockito有一定的认识. 一.为什么要用MockMvc 可能我们在测试控制层的代码都是启动服务器 ...

  3. Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) E. Arson In Berland Forest 二分 前缀和

    E. Arson In Berland Forest The Berland Forest can be represented as an infinite cell plane. Every ce ...

  4. linux下用sox音频处理常用方法

    一 sox可以给pcm文件加头 方法:sox -t raw -c 1 -e signed-integer -b 16 -r 16000 test.pcm test.wav 二 修改采样率: 方法: s ...

  5. SQLServer某个库log日志过大,无法收缩日志文件 ,因为该文件结尾的逻辑日志文件正在使用

    问题描述: 今天看到user库日志备份方面很久,然后查看到user库这个log日志很大 图片是我已经解决了,然后现在可以收缩的大小 解决方法: 1.先备份user库日志,因为很大,所以要等很久,这个只 ...

  6. PHPStorm使用PHP7新特性出现红色波浪错误

    今天在项目中使用PHP7新特性时PHPStorm出现了如下红色错误,看着让人很不舒服,明明没有错 本地配置LNMP的PHP版本是7.2所以不是安装的PHP版本过低的问题,而是PHPStorm默认支持的 ...

  7. Annotation-specified bean name 'userDaoImpl' for bean class [***] conflicts with existing, non-compatible bean definition of same name and class [***]

    使用Spring开发的时候报错如下: Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionExcept ...

  8. 死磕 java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁

    问题 (1)重入锁是什么? (2)ReentrantLock如何实现重入锁? (3)ReentrantLock为什么默认是非公平模式? (4)ReentrantLock除了可重入还有哪些特性? 简介 ...

  9. ElasticSearch简介(三)——中文分词

    很多时候,我们需要在ElasticSearch中启用中文分词,本文这里简单的介绍一下方法.首先安装中文分词插件.这里使用的是 ik,也可以考虑其他插件(比如 smartcn). $ ./bin/ela ...

  10. 打开excel打印时报“不能使用对象链接和嵌入”

    解决思路: 1.以WIN + R 打开命令行, 在命令行中输入dcomcnfg,打开组件服务. 2.在组件服务窗口中,点击到[控制根节点]->[组件服务]->[计算机]->[我的电脑 ...