Django
软件开发架构
1.C/S
2.B/S
HTTP协议
"""规定了浏览器与服务器之间数据交互的格式"""
一.四大特性
1.基于TCP、IP作用于应用层之上的协议
2.基于请求响应
3.无状态
4.无(短)连接
二、数据格式
三、响应状态码
用简单的数字来表示一串中文意思
注意:除了上述统一的响应状态码之外,公司还可以自定义自己的状态码
四、请求方法
1.get请求
2.post请求
WEB框架
问题一
基于wsgiref模块解决了上述两个问题
问题二
封装处理
1.定义一个网址与功能函数的对应关系
# 地址与功能对应关系 urls = [ ('/index',index_func), ('/login',login_func), ('/reg',reg_func), ]
2.按照功能的不同划分成不同的py文件
urls.py views.py mainrun.py
3.书写服务端代码
func = None # for 循环判断 for url_tuple in urls: # (),() if current_path == url_tuple[0]: # 将匹配到的函数名赋值给func变量 func = url_tuple[1] break # 判断func是否有值 if func: # 执行对应的函数 res = func(request) else: res = errors(request) return [bytes(res,encoding='utf-8')]
动静态网页
静态网页 数据全部都是写死的,万年不变 动态网页 数据来源于后端(代码、数据库) 1.访问网址展示当前时间(由后端模块生成并展示到HTML页面) def get_time_func(request): from datetime import datetime current_time = datetime.now().strftime('%Y-%m-%d %X') with open(r'get_time.html','r',encoding='utf-8') as f: data = f.read() # 字符串 data = data.replace('abdc',current_time) return data 2.后端有一个字典,将该字典传递给HTML页面,并且在该页面上还可以使用字典取值的各种操作 jinja2模块 pip3 install jinja2 ps:该模块是flask框架必备的模块,所以下载flask也会自动下载该模块 模板语法(用近似于python的语法在HTML文件上操作) {{user_data}} {{user_data['username']}} {{user_data.get('password')}} {{user_data.hobby}} {%for user_dict in data_list%} <tr> <td>{{user_dict.id}}</td> <td>{{user_dict.name}}</td> <td>{{user_dict.age}}</td> </tr> {%endfor%} 3.获取MySQL数据库数据展示到页面上 def get_db_func(request): import pymysql conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='root', database='db666', charset='utf8', autocommit=True ) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = 'select * from userinfo' # 分号可写可不写 affect_rows = cursor.execute(sql) res1 = cursor.fetchall() # [{},{},{}] # print(res) with open(r'templates/get_db.html', 'r', encoding='utf-8') as f: data = f.read() temp = Template(data) res = temp.render(data_list=res1) return res mysql> create database db666; Query OK, 1 row affected (0.36 sec) mysql> use db666 Database changed mysql> create table userinfo( -> id int primary key auto_increment, -> name char(32), -> age int -> ); Query OK, 0 rows affected (0.36 sec) mysql> insert into userinfo(name,age) values('jason',18),('egon',84),('tony',77),('jack',66); Query OK, 4 rows affected (0.12 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select name,age from userinfo; +-------+------+ | name | age | +-------+------+ | jason | 18 | | egon | 84 | | tony | 77 | | jack | 66 | +-------+------+ 4 rows in set (0.03 sec)
总结
1.纯手工写WEB框架 2.wsgire模块 1.封装了socket代码 2.处理了http数据格式 3.根据功能的不同拆分成不同的文件夹 urls.py 路由与视图函数对应关系 views.py 视图函数 templates 模板文件夹 # 1. 第一步 添加路由与视图函数的对应关系 # 2. 去views中书写功能代码 # 3. 如果需要使用到HTML则去模板文件夹中操作 4.jinja2模板语法 {{}} {%%} 5.简易版本web框架流程图
主流web框架
1.django框架 大而全,自带的功能组件非常非常多!类似于航空母舰 2.flask框架 小而精,自身的功能组件非常非常少!类似于游骑兵 但是第三方模块非常之多,如果把第三方模块全部叠加起来完全可以盖过Django 有时候也会受限于第三方模块 ps:三行代码就可以启动一个flask后端服务 3.tornado框架 异步非阻塞 速度非常的快 快到可以开发游戏服务器 ps:Sanic、FastAPI... """注意:小白不要同时学习两个及以上""" A: socket部分 B:路由与视图匹配 C:模板语法 Django A:用的是wsgiref模块 B:自己写的 C:自己写的 flask A:用的是wsgiref模块封装之后werkzeug B:自己写的 C:jinja2模块 tornado A:自己写的 B:自己写的 C:自己写的
django框架
# 注意事项 1.计算机名称不能有中文 2.项目名和py文件名最好也不要使用中文 3.Django版本问题 1.X: 2.X:1和2几乎一样 3.X:异步 ps:版本选择1.11.11版本 # 命令行下载 pip3 install django==1.11.11 # 测试是否安装完成 Django-admin # 查看Django版本 1. python -m django --version 2. import django django.get_version()
命令行模式
C:\Users\Thinkpad>d: D:\>django-admin startproject mysite 1.创建Django项目 django-admin startproject 项目名 2.启动Django项目 cd 项目名 python3 manage.py runserver ip:port ps:如果报错需要修改py文件源码 D:\python\lib\site-packages\django\contrib\admin\widgets.py line 152行后面的逗号去掉即可!!! '%s=%s' % (k, v) for k, v in params.items() D:\>cd mysite D:\mysite>python manage.py runserver # 错误 SyntaxError: Generator expression must be parenthesized (widgets.py, line 152) # 成功提示 Django version 1.11.11, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK. # 浏览器输入网址http://127.0.0.1:8000/ Next, start your first app by running python manage.py startapp [app_label]. 接下来,通过运行 python manage.py startapp [app_label] 来启动你的第一个应用程序。 You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work! 您看到此消息是因为您的 Django 设置文件中有 DEBUG = True 并且您尚未配置任何 URL。 开始工作! 3.创建app python manage.py startapp app名字 D:\mysite>python manage.py startapp app01
app
django是一款专门开发app(应用)的软件 我们创建一个Django项目之后类似于创建了一所大学 而app就类似于大学里面的各个学院,每个学院都可以有自己独立的各项功能职责 Django相当于是一个空壳子用来给各个学院提供资源!!! """我们创建的app一定要去setting文件中注册才能生效"""
pycharm快捷方式
1.new project django 项目名 解释器 应用名 # pycharm会自动帮你创建一个app
总结
命令行与pycharm创建不同点 1.命令行不会自动创建templates模板文件 2.命令行也不会自动配置模板文件夹路径 命令行: 'DIRS': [], pycharm: 'DIRS': [os.path.join(BASE_DIR, 'templates')]
django目录结构
mysite mysite文件夹 # 项目同名文件夹 __pycache__ # 缓存 __init__.py settings.py # Django暴露给用户可以配置的配置文件 urls.py* # 路由与视图函数(可以是函数也可以是类)对应关系(路由层) wsgi.py # 忽略 app01文件夹 # 应用(可以有多个) migrations文件夹 # 存储数据库记录相关(类似于操作日志) _init_.py admin.py # django后台管理 apps.py # 注册app models.py # 数据库相关(模型层) tests.py # 测试文件 views.py* # 视图函数(视图层) db.sqlite3 # Django自带的小型数据库 manage.py # django入口文件 templates* # 模板文件(存储html文件)(模板层)
python没有常量默认全部大写的变量看作常量
Tools Run manage.py Task... (Ctrl+Alt+R)
小白必会三板斧
1.HttpResponse 返回字符串 2.render 返回HTML页面,还可以使用模板语法 3.redirect 重定向 重定向
作业
1.理解上午框架推导思路(代码无需掌握) 2.独立完成Django安装及启动 3.使用Django展示数据库数据 urls.py views.py templstes