HTTP协议:
1. 浏览器往服务端发的叫 请求(request)
请求的消息格式:
请求方法 路径 HTTP/1.1\r\n
k1:v1\r\n
k2:v2\r\n
\r\n
请求数据
2. 服务端往浏览器发的叫 响应(response)
响应的消息格式:
HTTP/1.1 状态码 状态描述符\r\n
k1:v1\r\n
k2:v2\r\n
\r\n
响应正文 <-- html的内容
动态的网页:
本质上都是字符串的替换
字符串替换发生在什么地方:
在服务端替换完再返回给浏览器!!!
##########################################################
1. web框架的本质:
socket服务端 与 浏览器的通信
2. socket服务端功能划分:
a. 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn...
b. 根据用户访问不同的路径执行不同的函数
c. 从HTML读取出内容,并且完成字符串的替换 --> jinja2(模板语言)
3. Python中 Web框架的分类:
1. 按上面三个功能划分:
1. 框架自带a,b,c --> Tornado
2. 框架自带b和c,使用第三方的a --> Django
3. 框架自带b,使用第三方的a和c --> Flask
2. 按另一个维度来划分:
1. Django --> 大而全(你做一个网站能用到的它都有)
2. 其他 --> Flask 轻量级
命令行创建Django项目:
django-admin startproject mysite
命令行启动Django项目:
在项目的根目录下(也就是有manage.py的那个目录),运行:
python3 manage.py runserver IP:端口--> 在指定的IP和端口启动
python3 manage.py runserver 端口 --> 在指定的端口启动
python3 manage.py runserver --> 默认在本机的8000端口启动
静态文件(css/js/图片)
# 静态文件保存目录的别名
STATIC_URL = ‘/static/‘
# 所有静态文件(css/js/图片)都放在我下面你配置的文件夹中
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
form表单:
1. form不是from,所有获取用户输入的标签都应该放在form里面, 并且必须要有name属性
2. action属性控制往哪儿提交,method一般都设置成post
3. 提交按钮必须是type=submit,不能是别的类型
命令行创建app:
在Django项目的根目录输入:
python3 manage.py startapp app名字
########################################################
ORM之于SQL就像jQuery之于DOM
1. 什么是ORM?
是一种编程的方法论(模型), 和语言无关.(其他的语言也有类似的实现.)
2. ORM的本质:
类 ---> 数据表
对象 ---> 数据行
属性 ---> 字段
按照规定的语法写,自动翻译成对应的SQL语句.
3. ORM的功能:
ORM操作数据表
ORM操作数据行
4. Django里ORM的使用:
1. 手动创建数据库
2. 在settings.py里面,配置数据库的连接信息
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘,
‘NAME‘: ‘day62‘,
‘HOST‘: ‘127.0.0.1‘,
‘PORT‘: 3306,
‘USER‘: ‘root‘,
‘PASSWORD‘: ‘123456‘,
}
}
3. 在项目/__init__.py告诉Django用pymysql模块代替MySQLdb来连接MySQL数据库
import pymysql
pymysql.install_as_MySQLdb()
4. 在app/models.py里面定义类
# 出版社
class Publisher(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主键
# 创建一个varchar(64)的唯一的不为空的字段
name = models.CharField(max_length=64, null=False, unique=True)
5. 执行两个命令
1. python3 manage.py makemigrations --> 把models.py里面的更改记录到小本本上
2. python3 manage.py migrate --> 把更改翻译成SQL语句,去数据库执行
6.ORM操作:
1. 删除
1. 先找到对象,调用对象的.delete()方法
publisher_obj = models.Publisher.objects.get(id=7)
publisher_obj.delete()
或者
models.Publisher.objects.get(id=7).delete()
2. 修改
1. 找到对象,通过修改对象的属性来修改数据库中指定字段的值,要保存
publisher_obj = models.Publisher.objects.get(id=7)
publisher_obj.name = "新的出版社名字"
publisher_obj.save() --> 把修改提交到数据库
3. 查询
models.UserInfo.objects.all()
4. 增加
models.UserInfo.objects.create(name="张三")
#######################################################
GET和POST:
1. GET请求和POST请求
都属于HTTP协议规定的请求方法
1. GET请求:
1. GET请求携带的数据都拼在了URL上
2. GET请求携带的数据有长度限制 40k
2. POST请求
1. form表单提交数据
2. 上传文件
2. 什么时候用GET请求?
1. 浏览器想要得到一个HTML页面的时候
2. 搜索引擎查询关键字的时候 www.sogo.com/web/?query=新垣结衣
3. 什么时候用POST?
1. 向后端提交数据
1. 大段的数据
2. 包含隐私的数据
3. 上传文件
4. 实际中GET和POST的应用场景
1. GET:
1. 直接在浏览器地址栏输入URL访问网站
2. a标签
2. POST:
1. 登录注册
2. 修改(新增)大段的数据
3. 上传文件
Django后端取值
request.GET --> 大字典
request.GET["name"]/request.GET["id"] --> key不存在就报错了
request.GET.get("name", "sb") --> 推荐用这个方法取值
书
class Book(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主键
# 创建一个varchar(64)的唯一的不为空的字段
title = models.CharField(max_length=64, null=False, unique=True)
# 和出版社关联的外键字段
publisher = models.ForeignKey(to="Publisher")
出版社
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16, null=False, unique=True)
book = models.ManyToManyField(to=‘Book‘) # 多对多关联关系,ORM自动生成第三张表
原文:https://www.cnblogs.com/farion/p/10342010.html