欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

web框架-Django简介1

程序员文章站 2022-05-14 23:49:21
...

一.什么是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
web框架-Django简介1
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上创建
web框架-Django简介1
创建完成的django目录如下:
web框架-Django简介1
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中打开终端工具
web框架-Django简介1
在终端启动输入python manage.py runserver 8080
web端执行:http://127.0.0.1:8080/userinfo/
出现web框架-Django简介1
这个时候是默认的get请求,当填写数据提交后是post请求。
当填写数据后出现报错TypeError: unhashable type: ‘list’
并且web端返回错误的页面,不知道怎么解决
web框架-Django简介1

3.我们将这段小程序的数据改成数据库形式管理
(1)点击搜索按钮,输入database,单击选出数据库
web框架-Django简介1

web框架-Django简介1
通过菜单栏也可以打开database
web框架-Django简介1
(2)点击加号
web框架-Django简介1
一直不知道为什么我的database的Test connection一直是一个禁用状态,百度很久才发现是驱动没有安装,点击下方的蓝色的Download即可
web框架-Django简介1
(3)连接成功
web框架-Django简介1
(4)连接sqlite3的时候,也需要安装驱动,点击下方的蓝色的Download即可
web框架-Django简介1
(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)
web框架-Django简介1
再执行python manage.py migrate
新创建的表出来啦
web框架-Django简介1
(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)前端和后端交互成功!