python学习: Django 简单使用(1)

HTTP介绍

Http协议:超文本传输协议,定义浏览器和网络服务器之间的通信规则。Http协议规定客户端(浏览器)发送给服务器的内容格式,也规定服务器返回内容的格式。

Http协议包括请求协议和响应协议。Http协议是无状态协议,一次请求/响应结束后,服务就完成了,不保存状态,再次又是新的请求/响应。所以需要借助cookie,session保存状态。

 

请求协议

        请求协议格式:

        请求首行;

        请求头;

        空行;

        请求体;

示例:

请求头:

Host: home.firefoxchina.cn

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0

Accept: text/css,*/*;q=0.1

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate, br

DNT: 1

Connection: keep-alive

Cookie: uid=rBADnV1CLemucnyOmCCtAg==; Hm_lvt_dd4738b5fb302cb062ef19107df5d2e4=1564618219; Hm_lpvt_dd4738b5fb302cb062ef19107df5d2e4=1564618219

 

Accept:浏览器能够接收的内容,text/html,application/xhtml+xml等;

Accept-Language:支持语言;

Accept-Encoding:接收文件格式,支持压缩文件;

Connection: keep-alive,保持连接一段时间;

Cookie:保存用户状态信息;

Host:访问域名;

 

请求体:

浏览器发送给服务器的数据,GET没有请求体,POST有请求体。一般登陆注册的用户信息,form表单提交的信息放在请求体中。

 

GET请求:

        没有请求体;

        请求数据在请求地址栏,大小不超过1kb;

POST请求:

地址栏只有url地址;

使用请求体,保存请求数据;

        数据大小没有上限;

        请求体中存在中文,会使用url编码;

 

响应协议

响应协议格式:

        响应首行;

        响应头;

        空行;

        响应体;

 

响应头:

HTTP/1.1 200 OK

Date: Tue, 09 Jul 2019 01:43:00 GMT

Content-Type: text/css

Transfer-Encoding: chunked

Connection: keep-alive

Expires: Wed, 28 Feb 2029 21:02:42 GMT

Server: nginx

Last-Modified: Tue, 29 Jan 2019 09:51:58 GMT

ETag: W/"5c50223e-7d2"

Cache-Control: max-age=315360000

Content-Encoding: gzip

Age: 1

X-Via: 1.1 czdx83:2 (Cdn Cache Server V2.0), 1.1 PSgdzjdx6cx67:8 (Cdn Cache Server V2.0)

 

HTTP/1.1:请求协议;

Status code:状态码200请求成功;404资源没有找到;500服务器出现问题;

Server:服务器;    

Wsgiref模块

        Python的wsgiref模块是Python封装的一个web请求模块,将socket连接,连接监听这些操作封装的web模块。

''''

自定义web框架

封装了socket连接等过程

wsgiref是python封装的

'''

from wsgiref.simple_server import  make_server

 

def application(environ,start_response):

    #服务器获取浏览器包装的数据

    print(environ);

    #服务器响应返回数据

    #设置响应头

    start_response('200 OK',[('Content-type','text/html')]);

    #返回响应内容,响应体

    return ['<h1>hello world</h1>'.encode("utf-8")]

 

httpd = make_server('',8080,application);

#监听连接

httpd.serve_forever();

 

 

MVC模式

        MVC模式:Model(模型)、View(视图)、Controller(控制器)

        MTV模式:Model(模型)、Template(html页面模板文件)、View(视图函数)。MTV是Python的Django特定说法,类似MVC。

       

Django

Django安装

        进入https://www.djangoproject.com/download/ 网站下载对应版本源码包。

        我们使用的是python3版本,最好使用Django2版本。

       

 

        将Django-2.1.10.tar.gz解压到当前目录,Django-2.1.10目录可以发现setup.py文件。

        在命令行使用python setup.py执行安装程序。因为我们同时安装了python2和python3,重命名了相应python.exe的执行文件。

        我们需要python3安装Django,需要用python3执行命令python3 setup.py install。需要到我们解压目录下执行 命令。

 

 

 

 

 

Django创建项目

使用命令django-admin startproject firstDjango,我们配置了python2.7/Scripts和python3.7/Scripts的环境变量,如果直接执行不知道调用的是哪个版本的Django。

所以我们将python3.7/Scripts中django-admin.exe修改为django-admin2.exe。django-admin-script.py修改为django-admin2-scritpt.py。

 

 

然后执行命令django-admin2 startproject firstDjango。

 

可以在我们当前目录看到firstDjango的项目文件夹。

项目目录结构:

 

 

 

 

创建项目后,我们还需要在项目下创建应用。

使用命令python3 manage.py startapp helloApp

 

 

 

可以看到我们创建的应用helloApp。

 

 

helloApp的目录结构。

 

 

将我们创建的Django项目使用Pycharm打开。

setting.py:项目配置信息;

urls.py:项目负责url信息配置;

 

Django使用流程

setting.py:

添加我们创建helloApp的应用

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'helloApp',

]

 

 

urls.py:

添加:path('show_time/',views.show_time)。show_time是views中的视图函数。

from django.contrib import admin

from django.urls import path

from helloApp import views

 

urlpatterns = [

    path('admin/', admin.site.urls),

    path('show_time/',views.show_time)

]

 

 

views.py:

def show_time(request):

    #response返回信息

    response = HttpResponse("hello");

    return response;

 

 

终端执行项目python3 manage.py runserver

在浏览器访问就可以看到返回信息

 

 

项目文件下创建templates文件夹,创建hello.html文件:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>hello page</title>

</head>

<body>

    <h1>hello</h1>

    <h2>当前时间:{{time}}</h2>

</body>

</html>

 

修改setting.py文件,“DIRS”中加入templates。

TEMPLATES = [

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        'DIRS': ["templates"],

        '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',

            ],

        },

    },

]

 

 

将视图函数修改为:

def show_time(request):

    ## response返回信息

    # response = HttpResponse("hello");

    # return response;

    t = time.ctime();

    #返回一个html页面,使用字典返回参数{},将参数渲染到html中

    return render(request,"hello.html",{"time":t});

浏览器访问显示:

posted @ 2020-12-17 18:50  渔歌晚唱  阅读(251)  评论(0)    收藏  举报