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)前端和后端交互成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值