一、
1、互联网两台机器之间通行:ip、端口、协议
- 协议
- HTTP (80)
- HTTPS (443)
2、浏览器输入URL一回车返回页面发生了什么?
- 域名 -> DNS解析 -->ip地址 -> 找到服务端 ->服务端返回消息 -> 浏览器
- 浏览器 <-> 服务器
- 服务器把 写好的HTML页面,返回给浏览器,浏览器按照HTML格式渲染
「
」
3、请求和相应
- HTTP协议的特点:
- 浏览器给服务端发消息的过程叫请求(request)
- 服务器给浏览器回复消息的过程叫响应(response)
- 请求和相应的消息都必须遵循一个固定的格式
4、python中Web框架分类
- a、收发socket消息,按照HTTP协议解析消息 Web服务程序 wsgiref、gunicorn、uWSGI
- b、字符串替换,用来实现动态网页
- c、业务逻辑处理 Web应用程序
1- 自己实现abc的
- Tronado
2- 自己实现bc使用别人的a
- Django
3- 自己实现c使用别人的ab
- Flask
5、Web服务程序 <- WSGI协议 -> Web应用程序
5.5、Django版本
- LTS版本 (Long Team support)
6、创建第一个Django项目
安装: pip install django==1.11.11
pip install django==1.11.11 -i 指定源
- 1、命令行 Django-admin startproject first_Django
- 2、Pycharm创建
- file -> new Project ->右侧选Django -> 选好路径 ->选好环境 -> 名字app -> 在新的窗口打开文件
- 3、启动项目
- 命令行启动(切换到项目的根目录)
- python manage.py runserver 127.0.0.1:8090(改端口这样指定)
- pycharm启动
- 框中选项为项目名->让后点击启动按钮(右上角)(如果想改就在旁边点编辑-就可以改端口等)
- 目录介绍
- 和项目名一样的是根目录
-
---------------------
- 先来一份自己的理解
- 1、(与我们所创建文件名一致的目录)根目录
- manage.py
- 这是启动文件,程序入口。
- settings.py
- 包含了项目的一些设置,包括数据库信息、调试标志以及其他的一些工作的变量。
- BASE_DIR = 项目的根目录
- TIMELATES = templates去哪找
- DATABASES = 数据库
- 静态文件配置
- STATIC_URL = '/static/' # 请别名
- STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),] # 配置去static下找静态文件
- urls.py
- 路径与视图函数的映射关系
- 2、templates - 这个文件夹存放的是HTML文件
- 3、static - 这个文件夹是存放静态文件,需要自己配置,用的时候的导入时用
/static/.. 来引入所用的静态文件
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
# 这个static就代表了下面的路径 (寻找的时候就是去static下面的路径中挨个找)
STATIC_URL = '/static/' # 起别名, HTML中找静态文件都要以这个别名开始 (找到别名后就去这个别名的配置比文件中找对应的文件)
# 这个常量是固定格式
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
7、项目流程
- 先输入url
- 去Django的urls中匹配urlpatterns->匹配上调用后面匹配的函数->去找对应的函数
- 找到执行的函数->Django调用要执行的函数给函数传一个request参数,所有和请求相关的数据 都在request中
- render去templates文件夹找到HTML文件,打开读取内容,按照http响应格式给浏览器返回读取的内容
- 浏览器收到Django返回的响应消息,按照HTML格式显示这个消息
其他:
- from django.shortcuts import HttpResponse, render
- HttpResponse (封装了协议头等-有待商议)
- render (渲染)
- 文件的上传(form表单的提交, 必须用POST)
def index(request):
print(request.GET)
print(request.POST)
print(request.FILES)
for item in request.FILES:
fileobj = request.FILES.get(item)
f = open('upload/%s' % fileobj.name, 'wb')
item_file = fileobj.chunks()
for line in item_file:
f.write(line)
f.close()
return HttpResponse("成功")
- form表单上传文件时需要注意的事情
- action 最后加 / 或者 修改settings:APPEND_SLASH=False
- method 必须为post
- enctype = “multipart/form-data” 必须写
- 指定IP登录
默认IP和端口
python manage.py runserver
指定端口:
python manage.py runserver 192.168.12.12:8080
此时会报错,我们需要修改配置文件:
修改settings.py,将192.168.12.12添加到ALLOWED_HOSTS中
ALLOWED_HOSTS=['172.31.169.182','127.0.0.1','192.168.1.50','192.168.1.115']
也可以将ALLOWED_HOSTS改成通配符 *
ALLOWED_HOSTS = ["*"]
二、
1、表单的提交(登录)
- submit -> action -> 对应函数(参数request(数据信息))-> 处理
注意:必须要有name属性 *****
- 提交到服务器的是QueryDict对象,可以通过get获取值
2、form表单提交的三个要素
- form标签必须有action和method属性
- 所有获取用户输入的标签必须放在form表单中,必须有name属性
- 必须有submit按钮
3、redirect 跳转,改变方向
- 跳转到别人的页面,自己的页面
- 跳转比人页面
redirect("https://baidu.com")
- 跳转自己页面
redirect("/相对路径/")
4、Django必会三件套 from django.shortcuts import
- HttpRequest 返回一个指定的字符串
- render 返回一个HTML文件 HTML文件 模板语言
- redirect 跳转 路径 URL
5、request相关属性
- POST
- GET
- method
6、Django的模板语言
{{ 变量 }}
7、Django项目project
- app(应用) -> 不同的功能放在不同的app中
- 命令 :
- 创建app
python manage.py startapp app01(应用名)
- 告诉Django创建了app
在settings中的 INSTALLED_APPS 添加新创建的app(app名.apps.apps中的类)
8、程序链接mysql
- 使用pymysql模块
- 导入pymysql
- 创建链接
- 获取执行命令的游标
- 用游标执行SQL语句
- 获取SQL语句的执行结果
- 关闭游标
- 关闭链接
- ORM - Object Relationship Mapping (对象关系映射)
- 这时,创建一种工具 帮助我们翻译SQL语句(ORM - 面向对象的思想)
- 优点
- 开发效率高
- 开发不用直接写SQL语句
- 缺点
- 执行效率低
ORM DB
类 数据表
属性 字段
对象 数据行
- Django项目project
- app(应用) -> 不同的功能放在不同的app中
- 命令 :
- 创建app
python manage.py startapp app01(应用名)
- 告诉Django创建了app
在settings中的 INSTALLED_APPS 添加新创建的app(app名.apps.apps中的类)
- Django中ORM使用
- 用处:
- 操作数据表
- 操作数据行
- 使用
- 手动创建数据库
- 告诉Django连那个数据库
- settings中配置DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 链接数据库的类型
'NAME': 'db', # 链接数据库的名字
'HOST': '127.0.0.1', # 数据库主机地址
'PORT': 3306, # 数据库端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
}
}
- 用什么链接数据库?
- 利用第三方包 pymysql 和 MySQLdb(py2中)
- 告诉Django用pymysql模块代替默认的MySQLdb链接MySQL数据库
和settings.py同级的__init__.py文件,写上
import pymysql
pymysql.install_as_MySQLdb()
- 在app/models.py的文件中创建类
类必须继承models.Model
- 两个命令
- python manage.py makemigrations -> 相当于拿个小本本把models.py的变更记录下来
- python manage.py migrate -> 把上面的变更记录翻译成sql语句,去数据库执行
- ORM查询
User.object.filter(email='', pwd='')