web框架-Django简介1
一.什么是web框架(framework)–本质是一个socket
是一种开发框架(解决一个开放性设计问题设计的具有一定约束性的支撑结构),用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架
二.web应用的流程
1.浏览器发送一个http请求
2.服务器接收到请求,生成一个html文档
3.服务器把html文档当做http响应的body发送给浏览器
4.浏览器收到http响应后,将http的body取出html文档并且显示
三.wsgiref–python自带的web框架
from wsgiref.simple_server import make_server
def application(environ,start_response):
start_response('200 ok',[('content-type','text/html')])
return [b'<h1>Hello World</h1>']
http=make_server('',8080,application)
print('serving http on 8080...')
http.serve_forever()
执行:在浏览器输入127.0.0.1:8080
application()函数:符合WSGI标准的HTTP处理函数,可以接受两个参数–
environ:封装成一个对象,里面有所有的http请求信息的dict对象;
start_response:可以很方便的设置响应头,发送http响应
可以使用print(“environ”,environ[“PATH_INFO”])打印出信息
make_server:封装了socket对象以及准备过程(socket,bind,listen)
如下应用:
from wsgiref.simple_server import make_server
def application(environ,start_response):
start_response('200 ok', [('content-type', 'text/html')])
path=environ["PATH_INFO"]
print('path')
if path=='/book1':
return [b'<h1>Hello book1</h1>']
elif path=='/book2':
return [b'<h1>Hello book2</h1>']
else:
return [b'<h1>203</h1>']
http=make_server('',8080,application)
print('serving http on 8080...')
http.serve_forever()
下面进入重点
四.Django初探
1.Django文件的两种创建模式
(1)a.在cmd中选择任何一个文件夹,输入创建命令django-admin.py startproject mysite创建完成后再相应的文件夹下面出现mysite文件夹这里我在命令行模板中输入此命令后一直提示django-admin.py不是内部命令的错误,通过百度找到这个问题的解决方法是没有天剑django-admin.py文件所在地址的环境变量,我的是E:\workspace\untitled2\venv\Lib\site-packages\django\bin。但是添加完成后,我这里还是提示错误ImportError: No module named django.core,没有找到解决方法,希望看到本博的小伙伴知道怎么解决可以给我留言,谢啦。
b.接着你需要创建一个你自己的app,这里比如我想创建一个叫web的,在mysite目录下,在命令行输入 python manage.py startapp web
c.启动django项目python manage.py runsever 8080
(2)直接在pycharm上创建
创建完成的django目录如下:
manage.py–在django程序里面,通过它可以调用django shell和数据库
setting.py–包含一些默认设置,包括数据库信息和调试标识
urls.py–负责把url模式映射到应用程序
wsgi.py–web服务器
2.下面我们通过一小段程序简单的了解django的整个流程
在setting.py中注释掉’django.middleware.csrf.CsrfViewMiddleware’
urls.py
from django.conf.urls import url
from django.contrib import admin
from web import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^userinfo/',views.userinfo),
]
views.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render
# Create your views here.
user_list = []
def userinfo(request):
if request.method=="POST":
username = request.POST.get("username",None)
sex = request.POST.get("sex", None)
age = request.POST.get("age", None)
user={"username":username,"sex":sex,"age":age}
print(username)
print(sex)
print(age)
user_list.append(user)
return render(request,"index.html",{"user_list",user_list})
return render(request,"index.html")
在templates里面创建index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<hr>
<form action="/userinfo/" method="post">
<p>姓名<input type="text" name="username"></p>
<p>性别<input type="text" name="sex"></p>
<p>年龄<input type="text" name="age"></p>
<p><input type="submit" value="submit"></p>
</form>
<hr>
<hr>数据显示</hr>
<table>
<tr>
<td>姓名</td>
<td>性别</td>
<td>年龄</td>
</tr>
{% for i in user_list %}
<tr>
<td>{{ i.username }}</td>
<td>{{ i.sex }}</td>
<td>{{ i.age }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
在pycharm中打开终端工具
在终端启动输入python manage.py runserver 8080
web端执行:http://127.0.0.1:8080/userinfo/
出现
这个时候是默认的get请求,当填写数据提交后是post请求。
当填写数据后出现报错TypeError: unhashable type: ‘list’
并且web端返回错误的页面,不知道怎么解决
3.我们将这段小程序的数据改成数据库形式管理
(1)点击搜索按钮,输入database,单击选出数据库
通过菜单栏也可以打开database
(2)点击加号
一直不知道为什么我的database的Test connection一直是一个禁用状态,百度很久才发现是驱动没有安装,点击下方的蓝色的Download即可
(3)连接成功
(4)连接sqlite3的时候,也需要安装驱动,点击下方的蓝色的Download即可
(5)model.py文件中
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class userinfo(models.Model):
username=models.CharField(max_length=64)
sex = models.CharField(max_length=64)
age = models.CharField(max_length=64)
(6)在终端执行python manage.py makemigrations(终端打开view->Tool Windows->Terminal)
再执行python manage.py migrate
新创建的表出来啦
(7)views.py代码如下
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os,django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")# project_name 项目名称
django.setup()
from django.shortcuts import render
from web import models
# Create your views here.
user_list = []
def userinfo(request):
if request.method=="POST":
u = request.POST.get("username",None)
s = request.POST.get("sex", None)
a = request.POST.get("age", None)
# user={"username":username,"sex":sex,"age":age}
models.userinfo.objects.create(
username=u,
sex=s,
age=a,
)
user_list=models.userinfo.objects.all()
return render(request,"index.html")
(8)在终端启动输入python manage.py runserver 8080
web端执行:http://127.0.0.1:8080/userinfo/
(9)前端和后端交互成功!
下一篇: 前端为什么这么麻烦之浏览器