django 集合
1,前言
socket 位于应用层和传输层之间的一个抽象层,它是一个接口。
百度的服务器(socket服务端)
. 启动socket
. 绑定ip和端口
. 监听
. 接收数据
. 发送数据
. 断开连接 浏览器(socket客户端)
. 连接
. 发送数据
. 接收数据
. 断开连接
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服务端
功能:
. socket收发消息
. 根据不同的路径返回不同内容
. 动态页面 - 字符串的替换 模板的渲染 web框架的分类:
flask
django wsgiref uwsgi 模块接收请求 根据地址在urls.py匹配地址,找到对应函数执行,返回响应
tornado
3,django
-- cmd --
1 // pip install django==1.11. -i https://pypi.douban.com/simple/ # 下载
2 // django-admin startproject 项目名 # 创建项目 根目录右键+shift 打开命令行
3 // python manage.py runserver # 127.0.0.1: # 启动
python manage.py runserver # 127.0.0.1: 改端口
python manage.py runserver 0.0.0.0: # 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/")
django 集合的更多相关文章
- Django集合Ueditor
语言版本环境:python3.6 1.win安装步骤: git下载源码https://github.com/zhangfisher/DjangoUeditor 解压DjangoUeditor3-mas ...
- 《Django By Example》第十二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- 《Django By Example》第十二章(终章) 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- day 68 django 之api操作 | jQueryset集合与对象
我们的orm里面分为: jQueryset集合, 还有对象, 我们的jqueryset集合里面可以有多个对象,这句话的意思就是我们的对象是最小的单位,不可以再拆分了,我们的jQueryset集合就相当 ...
- python 全栈开发,Day111(客户管理之 编辑权限(二),Django表单集合Formset,ORM之limit_choices_to,构造家族结构)
昨日内容回顾 1. 权限系统的流程? 2. 权限的表有几个? 3. 技术点 中间件 session orm - 去重 - 去空 inclusion_tag filter 有序字典 settings配置 ...
- Django之集合函数使用与mysql表的创建特殊字段分析
1. 集合函数的使用场景: -- 单独使用: 不分组, 只查聚合结果 -- 分组使用: 按字段分组, 可查询分组字段与聚合结果 2. 导入聚合函数 from django.db.models impo ...
- Django表单集合----Formset
概述:Formset(表单集)是多个表单的集合.Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据,比如一个页面上添加多个用户信息,下面将会详细讲述如何使 ...
- Django 数据库查询集合(多对多)
Django 数据库查询集合(双下划线连表操作) 目录: 1.Django环境搭建 2.数据库建表 3.写入数据 4.查询语句 Django环境搭建 1.安装django pip install dj ...
- Django表单集合Formset的高级用法
Formset(表单集)是多个表单的集合.Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据,比如一个页面上添加多个用户信息.今天小编我就介绍下Djang ...
随机推荐
- zabbix 3.2源码安装
环境: centos7.2 nginx 1.10.3 mysql 5.5.38 php 5.5.38 一.zabbix介绍 1.Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企 ...
- awk命令的基本使用
命令主要用法 -格式1:前置命令 | awk [选项] '[条件]{编辑指令}' -格式2:awk [选项] '[条件]{编辑指令}' filename 常用命令选项 -F:指定分隔符,可省略(默认空 ...
- 前端框架之Vue(2)-模板语法
Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...
- 万恶之源 - Python 自定义模块
自定义模块 我们今天来学习一下自定义模块(也就是私人订制),我们要自定义模块,首先就要知道什么是模块啊 一个函数封装一个功能,比如现在有一个软件,不可能将所有程序都写入一个文件,所以咱们应该分文件,组 ...
- [js]promise学习2
let fs = require("fs"), path = require('path'); 普通读取文件方法 /* fs.readFile(path.resolve('./da ...
- LSTM输入层、隐含层及输出层参数理解【转载】
转自:https://blog.csdn.net/yyb19951015/article/details/79740869 //这个博客讲的挺不错的. http://www.newlifeclan.c ...
- 大牛推荐的10本学习 Python 的好书
Python:蛇亚目蟒科,主要包括分布于非洲及亚洲的无毒蟒蛇. Python:Richard Clabaugh拍摄的恐怖电影,2000年发行. Python:澳大利亚汽车公司. Python:英国偶发 ...
- U盘复制文件到最后5秒会卡住怎么办解决
现在的U盘容量已经非常大了,一般都有16G以上,为了能放单文件大于4G的数据大多数时候我们都是把U盘格式化为ntfs格式的,所以会出现不管是大文件还是小文件,当你往U盘里复制文件或者使用发送到U盘功能 ...
- Nodejs基础(5-6)HTTP概念进阶
1.什么是回调? 是异步编程最基本的方法,对于nodejs来说需要按顺序执行异步逻辑的时候一般采用后续传递的方式,也就是将后续逻辑封装在回调函数中作为起始函数的参数逐层去嵌套.通过这种方式来让程序按照 ...
- “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016 ...