python学习笔记(89) Django基础

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自动生成第三张表

猜你喜欢

转载自www.cnblogs.com/farion/p/10342010.html