目录:
http协议相关
四大特性
1.基于TCP/IP之上作用于应用层的协议
2.基于请求响应
3.无状态
cookie
session
token
4.无连接
websocket
http数据格式
请求格式
请求首行 GET /index HTTP/1.1
请求头(一大堆k,v键值对)
请求体(数据)
响应格式
响应首行 HTTP/1.1 200 OK
响应头(一大堆k,v键值对)
响应体(数据)
HTTP响应状态码
10X:服务端已经接受到你的数据了 你可以继续提交数据进行下一步操作
20X:请求成功(200)
30X:重定向(301,302)
40X:请求错误(404)
50X:服务端错误(500)
前后端概念
动静态网页
静态网页
数据是写死的 万年不变
动态网页
数据是实时获取的 一直在改变(eg:数据库的数据,当前时间)
模板渲染(雏形)
后端产生数据直接传递给前端页面 前端页面获取数据通过模板语法展示
模板语法
{{}}(变量名相关) 获取后端传递的数据 通过变量名
{%%}(逻辑相关)
jinja2模板语法 极为接近后端python语法
{{ data }}
<p>{{data.username}}</p>
<p>{{data['password']}}</p>
<p>{{data.hobby.0}}</p>
<p>{{data.hobby.1}}</p>
{%for user_dict in user_list%}
<tr>
<td>{{user_dict.id}}</td>
<td>{{user_dict.username}}</td>
<td>{{user_dict.password}}</td>
</tr>
{%endfor%}
python三大主流web框架
a:socket服务
b:路由与视图函数映射关系
c:模板渲染
django:大而全 类似于航空母舰
a用的别人的 wsgiref 上线之后会换成uwsgi
b自己写的
c自己写的
flask:小而精 类似于游骑兵
a用的别人的 werkzeug
b自己写的
c用的别人 jinja2
tornado:异步非阻塞
三者都是自己写的
django相关
创建django项目注意事项
1.计算机名称不能含有中文
2.一个pycharm窗口就是一个工程(项目)
3.项目文件夹不要有中文
ps:django版本问题
django 1.X #1.11 长期维护版本
django 2.X
安装
pip3 install django == 1.11.11
使用命令行
创建django项目
django-admin startproject 项目名
ps:创建一个应用名的文件夹 里面有一个跟应用名同名的文件夹和一个manage.py文件
创建应用
django-admin startapp 应用名
启动django项目
python3 manage.py runserver
ps:命令行创建django项目不会自动新建templates文件夹
并且settings配置文件不会自动写templates文件夹路径
使用pycharm
注意:
1 在django中创建的应用必须去settings文件中注册才能生效
否则django不识别
2 确保不要端口冲突
项目目录结构
mysite/
├── manage.py # 管理文件
└── mysite # 项目目录
├── __init__.py
├── settings.py # 配置
├── urls.py # 路由 --> URL和函数的对应关系
└── wsgi.py # runserver命令就使用wsgiref模块做简单的web server
django小白必会三板斧
# 返回的都是http响应对象
from django.shortcuts import render, redirect, HttpResponse
HttpResponse:返回字符串
render:返回html页面
redirect:重定向
django静态文件
静态文件
网站所用到的已经写好的文件(css,js,图片)
通常网站所用到的静态文件都会存放到static文件夹
django静态文件配置
STATIC_URL = '/static/' # 接口前缀
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'),
]
html中动态获得css文件
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7/css/bootstrap.min.css'%}">
<script src={% static "bootstrap-3.3.7/js/bootstrap.min.js"%}></script>
django连接mysql
1.配置文件中配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day19',
'USER':'root',
'PASSWORD':'123',
'HOST':'127.0.0.1',
'PORT':3306,
'CHARSET':'utf8'
}
}
2.去应用名下的__init__.py或者项目名下的__init__.py文件中 告诉django不要使用默认的mysqld_db模块连接mysql而是使用pymysql
import pymysql
pymysql.install_as_MySQLdb()
django对象关系映射
对象关系映射
类 >>> 数据库的表
对象 >>> 数据库里面的一条条的表记录
对象点属性 >>> 表记录的某个字段对应的值
ps:
能够让一个不会数据库操作的人 也能够通过编程语言轻松的操作数据库
有时候sql语句的查询效率可能偏低
django orm注意事项
django orm不会帮你自动创建库 只能帮你自动创建表
1.models.py中写模型类
2.执行数据库迁移(同步)命令
python3 manage.py makemigrations 将数据的更改操作记录到小本本上
python3 manage.py migrate 将更改真正同步到数据库
数据的增删改查
增
1.create()
modeles.User.objects.create(kwargs)
create方法会返回当前所创建的数据对象(*****)
2.对象.save()
user_obj = models.User()
user_obj.username = 'jason'
user_obj.save()
删
queryset对象.delete()
改
1.update()
models.User.objects.filter(kwargs).update()
批量更新
2.对象.save()
user_obj = models.User(kwargs)
user_obj.username = 'jason'
user_obj.save()
效率较低
查
1.all() 查所有 不需要传参数
2.filter(kwargs) 结构是一个queryset对象 你可以把它看成一个列表里面是一个个的数据对象