Web开发与认识
web开发
- web 全球广域网,万维网,给用户提供一个可视化的界面
- web开发
- web前端开发
- 开发一些页面 结构(html) 样式 css 行为 js
- 开发一些页面 结构(html) 样式 css 行为 js
- web后端开发
- 提供数据的支持,处理用户的请求
- web前端开发
上述流程:
request:请求
response:响应
地址:URL
https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1572582922039&di=353aa54ade32e4b6f1eca3c89102931f&imgtype=0&src=http%3A%2F%2Fpic22.nipic.com%2F20120728%2F6424304_184652450376_2.jpg
-
http
- https
-
baidu.com 一级域名
-
www.baidu.com 二级域名
-
api.xxx.com
-
api.xxx.cn club
-
-
www.xxxx.com/static/image/aaa.jpg
处理业务:视图
处理业务请求,返回响应
Django认识与安装
django简介
框架: 对同一类代码的封装
python写的框架
Django特点: 大
- 优点
- 重量级的框架,提供了丰富的功能组件,开发变得简单,快捷
- 完善的文档
- https://docs.djangoproject.com/en/2.2/
- https://docs.djangoproject.com/zh-hans/2.2/
- 开发效率快
- 缺点
- 开发不够灵活,不能够胜任高度定制化得开发
django的安装
为什么使用虚拟环境?
便于管理, 避免不必要的麻烦
如何选择虚拟环境
-
anaconda
-
不需要安装python
-
创建的虚拟环境可以选择python版本
-
解决依赖关系
-
创建虚拟环境 conda create -n 虚拟环境的名字 python=3.5.2 启动虚拟环境 activate 虚拟环境的名字 退出虚拟环境 deactivate
-
-
virtualenv
- 安装python
- virtualenvwarpper
- workon 虚拟环境的名字
- makevitualenv 虚拟环境的名字
安装django
django版本: 2.2.1
python 3.5.2
mysql 5.7
版本如何选择;
LTS 长期版本支持 长期维护
-
进入虚拟环境
- activate DjangoPath
-
pip安装
pip install django==3.5.2
-
查看django版本
-
进入python环境
-
python import django django.VERSION
-
Django使用
创建工程
- 创建一个文件夹 project
- 激活虚拟环境
activate DjangoPath
- 创建工程命令
django-admin startproject 工程名
启动项目:
进入工程目录: 跟manage.py 同级目录
激活虚拟环境
执行命令: python manage.py runserver
django服务默认启动在 8000端口
python manage.py runserver 启动服务,使用的是django自带的服务器,支持的最大并发量是200,经常用来做开发,测试使用。
python manage.py runserver
python manage.py runserver 127.0.0.1:9000
python manage.py runserver 0.0.0.0:9000
使用pycharm 打开服务
选择编译环境
pycharm启动服务
Django目录结构
|-Demo 项目工程目录
|-Demo 项目的主目录
|- __init__.py 项目初始化文件
|- settings.py 项目的配置文件
|_ urls.py 项目的路由文件
|- wsgi.py 项目的部署服务文件
|- db.sqllit3 数据库
|- manage.py 项目的管理文件,负责:启动项目,数据迁移
项目配置文件的介绍
"""
Django settings for Demo project.
Generated by 'django-admin startproject' using Django 2.2.1.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
# 项目的根目录,方便开发人员使用
# os.path.abspath 绝对路径
# os.path.dirname 文件所在目录
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# print(BASE_DIR)
#
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
## 秘钥
# SECRET_KEY = '#0^_--5gljl*@sp!x8grz*whz@@%-rqd!wan8rdzx6_$qx_afk'
SECRET_KEY = 'fdsfds111'
# SECURITY WARNING: don't run with debug turned on in production!
## 调试模式
## True 开启调试模式
## 开启调试模式: 1.更改django代码,自动重启服务 2. 显示错误信息,请求信息
DEBUG = True
# 允许访问的主机
ALLOWED_HOSTS = ['*']
# Application definition
## 注册app的 注册子应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
## 中间件 中间人
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
## 路由的根目录
ROOT_URLCONF = 'Demo.urls'
### 模板的配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
## django内置服务器
WSGI_APPLICATION = 'Demo.wsgi.application'
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
## 数据库相关的配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
## 权限认证
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/
## 语言
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
## 时区
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai' ## 上海时区
## 翻译系统
USE_I18N = True
## 数据本地化配置
USE_L10N = True
## 是否使用指定的时区
## True 使用django 默认时区 内置时区
## Flase 使用指定的时区
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
## 静态文件的配置
STATIC_URL = '/static/'
python manage.py runserver 0.0.0.0:8000
全局配置文件
第一个页面
需求: 浏览器访问: 127.0.0.1:8000/index 能够拿到 hello world 页面
步骤:
-
先写urls.py
- path(“index/”,函数名)
- path(“字符串或者是正则表达式”,要执行的函数或者类)
-
在项目的主目录中创建一个 views.py
-
views.py 写一个函数
from django.http import HttpResponse def index(request): return HttpResponse("hello world")
urls.py 路由文件
- 负责匹配用户的请求,分发任务
views.py 视图,负责处理用户的请求,返回一个响应
请求流程:
原因:django2.2版本之后,如果增加了路由,之前的/ 不能够再拿到 django提供页面
问题1:
排错思路:
- 查看路由是否写错
- 模板文件是否正确
- settings文件是否配置正确
django排错
设计模式
设计模式: 降低代码的耦合性,增加了可扩展,可移植
django MVT设计模式,同时遵循MVC设计模式
MVC
- M model 数据模型,提供数据的支持,封装了对数据库的访问
- V views 视图,用于封装结果,生成html页面,提供页面支持
- C 控制器 controller 接受用户请求,处理请求,与model和views进行交互,返回结果
MVT
-
M 和MVC中M一样,模型,提供数据的支持,封装了对数据库的访问
-
V 视图,和MVC中C相似,负责处理请求,返回响应
-
T Template模板,和MVC中的V相似,负责封装响应,提供页面支持
路由中使用正则
正则
"""
正则:是一种字符串的处理方式,用于匹配字符串
字符串的匹配两种:
内容匹配:
通过描述要匹配内容的类型,长度,获取匹配到的结果
re
结构匹配:
xpath 爬虫
通过描述要匹配的内容,在整体中的结构去匹配到想要的内容
"""
import re
### re.findall() 返回列表,返回的结果是所有符合条件的结果
### 内容匹配
## 类型匹配 原样匹配 . \d \D \w \W [] | ()
## 长度匹配 * ? + {}
## 特殊匹配 ^ $
string = "hello \n world 123 ___ "
# 原样匹配
# res = re.findall("hello",string)
# print (res)
# . 除了 \n 的 所有字符
# res = re.findall(".",string)
# print (res)
# \d 匹配的是数字
# res = re.findall("\d",string)
# print (res)
# # \D 除了数字
# res = re.findall("\D",string)
# print (res)
# \w 数字 字母 _
# res = re.findall("\w",string)
# print (res)
#
# # \W 非数字 非字母 非_
# res = re.findall("\W",string)
# print (res)
# [] 返回括号中的任意一个字符
res = re.findall("[a-zA-Z0-9]",string)
print (res)
## ^ 代表取反
res = re.findall("[^a-zA-Z0-9]",string)
print (res)
# # | 或者
#
# res = re.findall("hellowewewe|world",string)
# print (res)
# string = "hello \n world 1235 12 45 7 h ___ "
# # () 组匹配 ()后面的是条件
# res = re.findall("(\d)\d",string) ## 34h 56h 2wh
# print (res)
# P 起一个组名
# string = "132 244 363 578"
# res = re.findall("(?P<id>\d)\d",string) ## 34h 56h 2wh
# print (res)
# # (?P=id) 使用 id的值
# res = re.findall("(?P<id>\d)\d(?P=id)",string) ## 34h 56h 2wh
# print (res)
# 长度匹配 * ? + {}
# string = "hello \n world 123 ___ "
# * 匹配 0次或多次
# res = re.findall("\d*",string)
# print (res)
# + 匹配一次或多次
# res = re.findall("\d+",string)
# print (res)
# ? 匹配 0次或1次
# res = re.findall("\d?",string)
# print (res)
# {} 匹配指定次数
# res = re.findall("\d{3}",string)
# print (res)
## 特殊匹配 ^ $
# ^ 开始 匹配开头
# string = "hello \n world 123 ___ "
# res = re.findall("^hello",string)
# print (res)
# $ 结束 匹配结尾
# res = re.findall(" $",string)
# print (res)
路由中要使用正则表达式
django 2.0版本之前默认使用正则
导入re_path
^$
匹配 ,常用作首页- 组匹配 讲匹配的结果作为参数传到 视图中