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. 0day2安全——笔记1

    第一章 PE和内存之间的映射 节偏移 文件偏移地址(File Offset Address):数据在PE文件中的地址 装载地址(Image Base):PE装入内存的基地址 虚拟内存地址(Virtua ...

  2. 201871010116-祁英红《面向对象程序设计(java)》第十六周学习总结

    博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...

  3. 防止ssh暴力破解的小工具denyhosts

    DenyHosts 简介 DenyHosts 是 Python 语言写的一个程序软件,运行于 Linux 上预防 SSH 暴力破解的,它会分析 sshd 的日志文件(/var/log/secure), ...

  4. 由浅入深,讲解 spring 实战详细使用——spring 源码篇

    首先,这篇文章不会详细的深入底层源码,只是基于注解和配置来说说我们的 spring 的使用,别小看基础,保证有你没用过的注解和配置,走起. 我们先来建立一个 maven 项目,引入 spring 文件 ...

  5. 09-Django静态文件

    1.静态文件 项目中的图片.CSS.js都是静态文件,一般会将静态文件放到一个单独的目录下,也方便管理.一般会将静态文件放到一个单独的目录下,也可以放在应用的目录下,由于静态文件是全部应用都在使用的, ...

  6. Mac(PC)连接虚拟机MySQL失败

    解决: 首先登陆虚拟机的MySQL use mysql; select host,user from user; 可以看到,默认的mysql只允许本机访问 将host设置为通配符模式%,Host设置为 ...

  7. win10 关闭 “在时间线中查看更多日期” 提示

    在组策略中,禁用允许上传用户活动

  8. C#测试对比不同类型的方法调用的性能

    一. 测试方法调用形式 1. 实例方法调用 2. 静态方法调用 3. 实例方法反射调用 4. 委托方法的Invoke调用 5. 委托方法的DynamicInvoke调用 6.委托方法的BeginInv ...

  9. python基础教程:dir()和__dict__属性的区别

    只要是有属性的数据对象(不一定是面向对象的对象实例,而是指具有数据类型的数据对象),都可以通过- ---- __dict__和dir()来显示数据对象的相关属性. __ dict__可以看作是数据对象 ...

  10. 树莓派4B到货开箱体验

    树莓派4B到货开箱体验 实不相瞒,喜欢这块板已经很久了,但是国内4GB内存的版本始终没货,.....等等等,终于到货了,迅雷不及眼耳之势赶紧下单...购买点亮开发板所需要的物件 顺便看到一个好看的外壳 ...