• django 集合


    1,前言

    socket   位于应用层和传输层之间的一个抽象层,它是一个接口。
        百度的服务器(socket服务端)
            1. 启动socket
            2. 绑定ip和端口
            3. 监听
            6. 接收数据
            7. 发送数据
            9. 断开连接
        
        浏览器(socket客户端)
            4. 连接
            5. 发送数据
            8. 接收数据
            9. 断开连接
    http协议:
    1 // 请求方式:8种  GET POST DELTE PUT OPTIONS HEAD 
    2 // 状态码:
    3 // url  协议 ip 端口 路径 查询  ?k1=v1&k2=v2 
    请求(request--浏览器给服务端发的消息)   get方式没有请求数据(请求体)
      '请求方式 url 协议版本
                k1: v1
                k2: v2
             
                '
    响应(response--服务端给浏览器发送的消息) 
         '协议版本 状态码 状态描述
                k1: v1
                k2: v2
                
                HTML文本'  响应数据(响应体)--> html文本
    --* 浏览器发送请求接收响应的流程 *--
    地址栏上输入URL,回车,发送GET请求
    服务器接收请求,获取到路径,根据不同路径返回不同内容
    服务器把响应的内容组成符合HTTP协议响应格式的字符串返回给浏览器
    浏览器接收到响应,拿到响应体(HTML代码),进行渲染

    2,web 框架本质  -- socket服务端 

    功能:
                1. socket收发消息
                2. 根据不同的路径返回不同内容
                3. 动态页面 -  字符串的替换  模板的渲染
                   
    web框架的分类:
                flask          2     
                django         2 3   wsgiref uwsgi 模块接收请求 根据地址在urls.py匹配地址,找到对应函数执行,返回响应
                tornado        1 2 3 

    3,django

    -- cmd -- 
    1 // pip install django==1.11.18 -i https://pypi.douban.com/simple/   # 下载
    2 // django-admin startproject 项目名   # 创建项目  根目录右键+shift 打开命令行
    3 // 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 改IP
    4 // 配置

      TEMPLATES 模板配置
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
      DATABASES 数据库
      STATIC_URL = '/static/' # 别名

    5 // 简单使用

    from django.shortcuts import HttpResponse,render

    def index(request):

      # return HttpResponse('这是index页面')
      return render(request, 'index.html')

    
    

    urlpatterns = [
    url(r'^admin/', admin.site.urls),

    url(r'^index/',index)

    ]

    -- pycharm 下 --

    settings ->project ->project interpreter ->双击django->左侧点Manage Repositories进入后点击右侧加号->添加进去http链接 specify version 选择版本 #下载

    file ——》 new project ——》 项目名 ——》 选择解释器 ——》 create   #创建项目

    点击绿三角(切记勿用右键启动文件)                    #运行

    
    

    4,form 表单

    form标签有 action=""   method="post"
    input标签要有name属性
    需要有一个type=submit的input标签 或者 button 按钮 
    
    目前可以提交post请求:
    在settings.py中注释MIDDLEWARE中的
    django.middleware.csrf.CsrfViewMiddleware 
    request.method  # 请求方式  POST GET 
    request.POST    # form表单提交POST请求的数据 类似字典
    return redirect('https://www.baidu.com/')
    return redirect('/index/')   # 响应头 Location: /index/
    -- APP --
    命令行 : python manage.py startapp app名称

    pycharm:tools ——》 run manage.py task ——》 startapp app名称

    settings.py 里 # 注册APP   'app01.apps.App01Config'   # 推荐写法

    5, ORM的介绍和使用   对象关系映射  在业务逻辑层和数据库层之间充当了桥梁

    django项目使用 mysql 数据库的流程:
    1 创建数据库     cmd 下进去mysql
    2 配置 settings  引擎/名称/host/port/user/password
    3 在和settings.py同级目录下的init.py里
    import pymysql
    pymysql.install_as_MySQLdb()
    4 创建表 (在app下的models.py中写类)
    from django.db import models
    class User(models.Model):
        username = models.CharField(max_length=20)
        password = models.CharField(max_length=20)
    注意 : django提供的 ManyToManyField
    数据库迁移:
    python manage.py makemigrations #保存models的变更记录
    python manage.py migrate      #操作到数据库
    python manage.py createsuperuser  #admin使用的超级用户
    -- 字段 --
    AutoField 自增字段 一个表中只能一个 primary_key=True
    IntegerField 数值的范围是 -2147483648 ~ 2147483647
    CharField 字符串 必须提供max_length参数
    DateField 日期 格式YYYY-MM-DD,相当于Python中的datetime.date的实例
    auto_now:每次修改时修改为当前日期时间。
    auto_now_add:新创建对象时自动添加当前日期时间。
    auto_now和auto_now_add和default参数是互斥的,不能同时设置

    DatetimeField 日期时间字段,格式为YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime的实例

    from django.db import models
    # 出版社
    class Publisher(models.Model):
        pid = models.AutoField(primary_key=True)  # 主键
        name = models.CharField(max_length=32, unique=True)  # varchar(32)
    
        def __str__(self):
            return self.name
    
    
    # 书籍
    class Book(models.Model):
        name = models.CharField(max_length=32, unique=True)  # varchar(32)
        pub = models.ForeignKey('Publisher', on_delete=models.CASCADE)
    
        def __str__(self):
            return self.name
    
    
    # 作者
    class Author(models.Model):
        name = models.CharField(max_length=32, unique=True)
        books = models.ManyToManyField('Book',through='Author_book')  #django创建的 多对多关系表  
    
        def __str__(self):
            return self.name
    
    class Author_book(models.Model):
        author = models.ForeignKey('Author', on_delete=models.CASCADE)  # 外键 关联哪张表
        book = models.ForeignKey('Book', on_delete=models.CASCADE)      # 外键 关联哪张表
        date = models.DateTimeField()  # python datetime    一个作者一本书 什么时候出的
    发请求方式-- 输地址 form(默认get) a标签
    函数返回值--
    HttpResponse('字符串')
    render(request,'xx.html',{'键':值}) -->完整页面渲染
    redirect('要跳转的地址') --重定向 redirect('/index/')ORM -- 专注业务逻辑,提高开发效率
    类-表 
    对象-行
    属性-字段
    models.类.objects.all() -- 获取全部
    表.objects.create(name='xxx',其他) #增
    Book.objects.get(pk=1).delete() #删除
    Book.objects.filter(pk=1).delete() #删
    对象.字段 = 新值 对象.save() #保存到数据库
    author_obj.books.set(books_id) #多对多 设置关系
    正向查询 (manytomany表) 作者->书 作者.books. models.表名.objects.筛选条件
    反向查询
    对象.表名小写_set -- 多对多的管理对象

    对象.表名小写_set.all() --所有的对象

    ---------------------------

    类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器
    Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器
    from django.views import View
    from django.utils.decorators import method_decorator
    
    class AddClass(View):
    
        @method_decorator(wrapper)
        def get(self, request):
            return render(request, "add_class.html")
    
        def post(self, request):
            class_name = request.POST.get("class_name")
            models.Classes.objects.create(name=class_name)
            return redirect("/class_list/")


  • 相关阅读:
    8月10日CSS总结
    CSS总结
    CSS总结
    Jquery属性&css 大全
    Jquery---选择器 大全
    Javascript第七天
    Javascript第六天
    Javascript第五天
    Javascript 第四天
    第三天 JavaScript运算符(续)
  • 原文地址:https://www.cnblogs.com/zhangchen-sx/p/10424394.html
Copyright © 2020-2023  润新知