Web开发的核心
request:用户发起的请求
response:服务器返回的响应
URL(统一资源定位符):资源在服务上的位置
URI(统一资源匹配符)
协议:https,http,ftp,file。
域名部分:pics1.baidu.com
资源在服务器上的路径:/feed/
资源名称与类型:e4dde71190ef76c605e25f73dc69eaffaf51673e.jpeg
路由:类似企业的前台,当有请求通过,有路由功能指向具体处理的部分。
视图:具体提供web服务功能
用户通过浏览器或者脚本使用url进行web请求,服务器接收web请求然后交给路由处理,路由执行具体处理的功能块,我们把这个功能块称为视图。由视图提供具体的处理工作。但是视图在处理请求的过程当中,可能需要调用数据库。所以视图也要连接数据库。
Django
Django框架:有python开发的web开发框架。框架是一种项目共性代码的集合。
Django的优点:①django拥有完备的功能封装,好多功能不需要手动编写,调用即可②Django的开发效率极高。
Django的缺点:①开发灵活度不够,如果进行定制开发,极有可能需要修改源码②执行的效率较低。
Django通常用于在工作当中快速实现一个完整的功能,然后针对功能再进行细节开发。
Django环境的安装
开发环境安装
1,创建Django的沙箱环境,要求是python3.5
打开CMD命令行输入:conda create -n DjangoPath python=3.5.2
2,在沙箱环境当中安装Django2.2.1
1,激活虚拟环境
activate DjangoPath
2,安装Django2.2.1
pip install django==2.2.1——》默认为国外源
国内源:
阿里云 http://mirrors.aliyun.com/pypi/simple/
豆瓣http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
华中科技大学http://pypi.hustunique.com/
3,测试安装
activate DjangoPath
python——》进入python
Django初体验(命令行)
1,找到要创建Django的项目,打开命令行
2,激活虚拟环境,创建Django项目
activate DjangoPath ——》激活环境
django-admin startproject Blog——》创建Django项目
3,切入项目目录,执行启动命令
Python manage.py runserver
Python manage.py runserver0.0.0.0:8000
Runserver 命令可以指定ip和端口
0.0.0.0代表所有ip
正则表达式
正则表达式:是一种高级字符串处理方式,通常用于字符串的匹配。
在所有Python字符匹配任务当中,分为两种匹配:
内容匹配: 根据对字符的内容类型,长度来描述字符,对内容进行匹配的方法是 正则
结构匹配: 根据对字符所处的位置进行描述的匹配,叫做结构匹配,对结构进行匹配的方法是 xpath
二者都有的匹配模块时beautifulsoup简称bs4
Python当中的正则模块叫做,re
Re.findall 目的就是匹配字符串当中所有满足条件的字符
内容类型的描述:
import re
str="""hello World my phone number
is 155033244833309099 !"""
#原样匹配,匹配字符原样,通常结合其他匹配使用
result=re.findall(r"l",str)
print(result)
#匹配所有非换行的字符
result=re.findall(r".",str)
print(result)
# 匹配所有数字
result=re.findall(r"\d",str)
print(result)
#匹配所有的非数字
result=re.findall(r"\D",str)
print(result)
#匹配所有字母、数字、下划线
result=re.findall(r"\w",str)
print(result)
# 匹配所有字符串当中的所有的非字母、非数字、非下划线
result=re.findall(r"\W",str)
print(result)
#[] 匹配括号里的任意元素
result=re.findall(r"[hl12]",str)
print(result)#
#[] 匹配括号里的范围里的任意元素
result=re.findall(r"[1-9]",str)
print(result)
#[] 匹配非括号里的任意元素
result=re.findall(r"[^lo]",str)
print(result)
#匹配|两边的任意一边
result=re.findall(r"h|1|2",str)
print(result)
#()组匹配, 匹配括号内的表达式
result=re.findall(r"(\d)",str)
print(result)
#命名组匹配,匹配一个前面相同的组
result=re.findall(r"(?P<num>\d)(?P=num)",str)
print(result)
# *匹配0到多个
result=re.findall(r"\d*",str)
print(result)
# +匹配1到多个
result=re.findall(r"\d+",str)
print(result)
#? 匹配0到1个
result=re.findall(r"\d?",str)
print(result)
#{}匹配几个
result=re.findall(r"1\d{10}",str)
print(result)
#匹配字符串的开头
result=re.findall(r"^h",str)
print(result)
#匹配字符串的开头结尾
result=re.findall(r"h$",str)
print(result)
#Re.search和re.match都是匹配一次指定的字符,re.search是从字符整体开始匹配,而match是从开头匹配,也就是说,如果开头没有,search会向后接着匹配,match会返回None。
result=re.search(r"\w\w",str)
print(result)
print(result.group())
print(result.groups())
#
result=re.match(r"l",str)
print(result)
print(result.group())
print(result.groups())
# 匹配包括换行在内的所有字符
result=re.findall(r".",str,re.S)
print(result)
#忽略大小写匹配
result=re.findall(r"[a-z]",str,re.I)
print(result)