目次はじめにダウンロードし、インストールDjangoのモデル知人

ジャンゴ

、Webアプリケーション

どのようなWebアプリケーション

Webアプリケーション、アプリケーションのWebを介してアクセスすることができ、プログラムの最大の利点は、ユーザーが簡単に、ユーザーがブラウザだけを持っている必要があり、アプリケーションにアクセスすることができ、追加のソフトウェアをインストールする必要はありませんということです

アプリケーションは、B / Sの2つのモードC / Sを有しています C / Sは、このような手順は、一般的に独立して実行されていることを意味し、クライアント/サーバーアプリケーションです。B / Sには、ブラウザのクライアント/サーバーアプリケーション、そのようなアプリケーションであると一般的に実行するためにIEや他のブラウザを意味します。WEBアプリケーション一般B / Sモデル。Webアプリケーションは、最初に「アプリケーション」であり、そのような基本的にどのような差は認められなかったC、C ++およびその他の手続のうち、書き込みなどの標準的なプログラミング言語を使用して。しかし、Webアプリケーションは、独自のユニークな場所を持っている、それはむしろ操作の伝統的な方法を使用するよりも、Webベースであるということです。言い換えれば、それは一般的なブラウザ/サーバアーキテクチャの製品です。

Webアプリケーションの利点

  • Webアプリケーションは、あなたが必要とするすべては、適切なブラウザである、任意の複雑な「拡大」プロセスを必要としません。
  • ネットワークアプリケーションは、多くの場合、ユーザーのハードドライブに小さなスペースを取る、またはそれが消費されていません。
  • 新機能はすべて自動的にクライアントに通知するために、サーバー上で実行されているとして、彼らは、更新する必要はありません。
  • Webアプリケーションとサーバーのネットワーク製品は、電子メールや検索機能などの機能を組み合わせることが容易です。
  • 彼らは、Webブラウザのウィンドウ内で実行するので、ほとんどの場合、彼らは(などWindows版、Mac、Linuxの、など)、クロスプラットフォームの使用であるため、

Webアプリケーションのデメリット

  • Webアプリケーションは、ブラウザの適用性を強調する。ブラウザは何の特定の機能を提供していない、または特定のプラットフォームやオペレーティングシステムのバージョン(リードNA)を放棄した場合、それは、多数のユーザーに影響を与えます。
  • ネットワークアプリケーションは、インターネットリモート・アプリケーション・ファイル・サーバに依存しています。このように、接続の問題は、アプリケーションが正常に機能しない場合があります。
  • 多くのWebアプリケーションでは、オープンソースではない、とだけ第三者が提供するサービスに頼ることができるため、ユーザー向けにカスタマイズパーソナライズされ、ほとんどの場合、ユーザーがオフラインで使用することはできませんので、多くの柔軟性を失ったことはできません。
  • 彼らは、単にアプリケーションサービスプロバイダの可用性に依存しています。会社が倒産した場合は、サーバーの使用を中止し、ユーザーは以前のデータをトレースすることはできません。比較し、参照、ソフトウェアメーカーが倒産した場合でも、従来のソフトウェアのインストールを実行し続けることができ、もはや更新または他ものの、ユーザーサービス。
  • 同様に、ソフトウェアプロバイダ会社とその機能は、より大きなコントロールを持っています。彼らは、ユーザーが更新する前に解決すべきバグのを待つしたい場合でも、ソフトウェアに新しい機能を追加することができるだろう場合。貧弱なソフトウェアバージョンをスキップすることも不可能です。同社は、ユーザーに望ましくない特性を課すことができるだけでなく、自由な支出を削減するために、帯域幅を削減します。
  • 同社は、任意のユーザーの行動を取得することは理論的に可能です。これはプライバシーの問題を引き起こす可能性があります。

B / Sアーキテクチャの利点

ブラウザ/サーバ・アーキテクチャは、(ブラウザ/サーバ、B / Sと呼ぶ)よ​​り多くの企業になって、WAN上ウェルアプリケーションとすることができます。いくつかの他のアプリケーションアーキテクチャに対するブラウザ/サーバアーキテクチャ、次の三つの有利な側面:

  • このアーキテクチャは、サーバーの通信のクライアントとしてインターネット標準通信プロトコル(通常はTCP / IPプロトコル)プロトコルを使用しています。これは、人々がどこでもインターネットに適切にサーバにアクセスすることができますことができます。サーバーでは、データが適切なWebサービスやデータベースサービスによって処理することができます。外部標準通信プロトコル、データを共有することができます。
  • データの結果は、サーバー上で処理され、クライアントの直接ダウンロードを容易にするために、Webページを生成するために処理されます。
  • データの処理は、データの表示をもたらすために、ブラウザのクライアントアプリケーションクライアント上でさらに簡単です。もはや別のクライアントを作成し、他の種類のアプリケーションをインストールする必要がありません。このように、クライアントのみ内蔵のブラウザオペレーティングシステムをインストールする必要があり、ブラウザのインス​​トールを指示し、サーバー上のデータへのアクセスを可能にすることができます。ブラウザは、コンピュータ機器の標準であります

本質的には、要約すると:ブラウザはソケットクライアントであり、サーバは、サーバソケットであります

ソケットベースの手のラインとシンプルなWebアプリケーション

import socket

def server_run():
    server = socket.socket()  # 创建socket对象
    server.bind(('127.0.0.1',8003))  # 绑定ip和端口号
    server.listen(5)  # 设置半连接池
    while True:
        # 1.直接在send内写回复发送给客户端
        #conn,addr=server.accept()
        #recv_data = conn.recv(1024)
        #print(recv_data)
        # 2. 打开一个html文件,发送给客户端
        #with open('test.html','r',encoding='utf-8') as f:
           # data = f.read()
           # conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
        # 3. 动态网页渲染
        import time
        now=time.strftime("%Y-%m-%d %X")
        print(now)
        with open('test.html','r',encoding='utf-8') as f:
            data=f.read()
        data=data.replace('@@@',now)
        conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
        conn.close()
 if __name__ == '__main__':
    server_run()

HTTPプロトコル(記憶)

サーバーとローカルブラウザ間の伝送ハイパーテキスト転送プロトコル:HTTPプロトコルは、(ハイパーテキスト転送プロトコル)はワールド・ワイド・ウェブ(ワールド・ワイド・ウェブWWW)のために使用されているハイパーテキスト転送プロトコルの略語です。

HTTPは、分散ハイパーメディア情報システムのための簡単、迅速な方法によるオブジェクト指向のアプリケーション層に属するプロトコルです。それが1990年に提案され、使用および開発の数年後、継続的に改善され、拡張されました。上のサーバアーキテクチャ - HTTPプロトコルは、クライアント上で動作します。WEBサーバであるHTTPクライアントのURLなどのブラウザは、HTTPを介してサーバにすべての要求を送信します。Webサーバは、受信した要求に応じて、クライアントへの応答情報を送信します。

HTTPプロトコルの特長

  • HTTPプロトコルはTCP / IPプロトコルを使用して、アプリケーション層のプロトコルに基づいています
  • 要求に基づいて-応答パターン:HTTPは、契約は、クライアントからのリクエストを発行し、サーバが要求に応答し、最終的に返すと、他の言葉で、スタートを設定することができ、クライアントの通信を確立を開始することで、サーバは要求を前に受信されないされませんこれは、応答を送信します。
  • ステートレス保存:HTTPは、非保存状態、即ち、無状態(ステートレス)プロトコルです。HTTPプロトコル自体は、要求及び格納された応答との間の通信状態はありません。これは、HTTPレベル、プロセスに固執していない要求または応答を送信するための素敵なプロトコルを意味します。新しい要求が送信されたときにHTTPプロトコルを使用し、それは、対応する新たな応答を生成します。契約自体は、要求または応答情報パケットの前にすべてのものを保持しません。これは、すぐに多数のトランザクションを処理するためにあるプロトコルのスケーラビリティことを保証するために、具体的には、非常にシンプルに設計されたHTTPプロトコル。Webが業務処理につながったいかなる状態がないので、開発を続けしかし、困難なケースが増加となります。例えば、ユーザーは、彼が駅の他のページにジャンプした後も、ショッピングサイトにログオンするだけでなく、ログイン滞在し続けることができるようにする必要があります。この例では、サイトが要求、ユーザーのステータスを維持する必要性を送信者を把握することができることです。HTTP / 1.1は、クッキー技術の導入、次いで、状態を維持するために、所望の機能を実現するためであるがステートレスプロトコルです。その後、クッキーやHTTPプロトコル通信を使用すると、状態を管理することができます。
  • 接続なし:いいえ接続を意味しないが、各リンクに一つだけの要求を制限することはありません。サーバは、顧客によるクライアント要求および応答を処理した後、すなわち、切断。このようにして、送信時間を節約することができます。

HTTPリクエストプロトコル

ブラウザによって要求されたプロトコルデータを含んhttpプロトコルは従って、ブラウザにデータ・サーバに従うことをサーバーから送信されたプロトコルに要求を送信します。HTTPは、HTTPパケットとして知られるように考えられています。リクエスタ(クライアント)HTTPパケットが要求パケットを行い、応答者(サーバ側)は、応答メッセージで行われました。HTTPワードテキストメッセージ自体は、複数行のデータで構成されています。

リクエストフォーマット:

リクエスト方法:要求をGETとPOST

  • ボディGETリクエスト提出されたデータは、このようなEditBook?名= test1の&IDなどのパラメータ間のリンク&するURLに「?」スプリットURLの後に配置され、データを送信される= 123456 POSTメソッドは、HTTPパケット内に提出されたデータでありますインチ
  • (URLの長さにブラウザの制限ため)、およびPOSTメソッドで送信されたデータが限定されるものではなく、限られたデータのサイズを提出GET。
  • GETとPOSTは、さまざまな方法で取得したサーバ要求データを要求します。
 GET请求
    # 请求首行
    GET / HTTP/1.1\r\n
    # get请求后面的参数
    GET /?name=lqz&age=18 HTTP/1.1\r\n
    # 请求头
    Host: 127.0.0.1:8008\r\n
    Connection: keep-alive\r\n
    Cache-Control: max-age=0\r\n
    Upgrade-Insecure-Requests: 1\r\n
    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\r\n
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, br\r\n
    Accept-Language: zh-CN,zh;q=0.9\r\n
    Cookie: csrftoken=7xx6BxQDJ6KB0PM7qS8uTA892ACtooNbnnF4LDwlYk1Y7S7nTS81FBqwruizHsxF\r\n\r\n'
    # 请求体(get请求,请求体为空)    
    '''
    '''
    POST请求
    # 请求首行
    POST /?name=qzk&age=18 HTTP/1.1\r\n
    # 请求头
    Host: 127.0.0.1:8008\r\nConnection: keep-alive\r\nContent-Length: 21\r\nCache-Control: max-age=0\r\nOrigin: http://127.0.0.1:8008\r\nUpgrade-Insecure-Requests: 1\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nReferer: http://127.0.0.1:8008/?name=lqz&age=18\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\nCookie: csrftoken=7xx6BxQDJ6KB0PM7qS8uTA892ACtooNbnnF4LDwlYk1Y7S7nTS81FBqwruizHsxF\r\n\r\n
    # 请求体
    name=qzk&password=123'
    
    '''

応答プロトコル

応答形式

応答ステータスコード

デューティステータスコードクライアントは、サーバーが返すようにリクエストを送信したい要求したときの結果です。ステータスコードにより、ユーザーはサーバープロセスの状態が情報サーバに要求を知ることができます。

Webフレームワーク

Webフレームワーク(Webフレームワーク)は、動的なWebサイト、Webアプリケーションおよびネットワークサービスの開発を支援する開発フレームワークです。これらのWebフレームワークのほとんどは、ウェブサイトを開発し、展開するための方法を提供するだけでなく、ウェブの行動に共通のアプローチを提供します。Webフレームワークは、機能の多くを達成して、開発者が提供するフレームワークを使用し、独自のビジネスロジックを完了し、すぐにWebアプリケーションを開発することができます。ブラウザおよびサーバが通信するためにHTTPプロトコルに基づいています。Webフレームワークは、コードベースシートのダース以上ラインは、使用の簡便な方法の多くは大きく開発効率を向上させることがある引き出されていると言うことができます。

wsgirefモジュール

最も単純なWebアプリケーションでは、ユーザーは、要求を受信したHTMLファイルとリターンから読み込み、最初のHTMLファイルは、既存のHTTPサーバソフトウェアで、良いで保存されています。

あなたが動的にHTMLを生成したい場合は、自分自身を達成するためにこれらのステップを配置する必要があります。しかし、HTTPリクエストを受け付け、解析HTTPリクエスト、HTTPレスポンスが送信されクーリーは、私たち自身が、これらの基礎となるコードを記述する場合、それはまだ、ダイナミックHTMLを記述するために開始されていない、生きる、あなたはHTTPの仕様を読み取るために月を過ごす必要があります。

​ 正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI:Web Server Gateway Interface。而wsgiref模块就是python基于wsgi协议开发的服务模块

from wsgiref.simple_server import make_server

def mya(environ, start_response):
    print(environ)
    start_response('200 OK', [('Content-Type', 'text/html')])
    if environ.get('PATH_INFO') == '/index':
        with open('index.html','rb') as f:
            data=f.read()

    elif environ.get('PATH_INFO') == '/login':
        with open('login.html', 'rb') as f:
            data = f.read()
    else:
        data=b'<h1>Hello, web!</h1>'
    return [data]

if __name__ == '__main__':
    myserver = make_server('', 8011, mya)
    print('监听8010')
    myserver.serve_forever()

Django简介之MVC与MTV

MVC

web服务器开发领域里最著名的是MVC模式,所谓MVC就是把web应用分为模型(Models)、控制器(control)和视图(views)三层,他们之间已一种插件式的、松耦合式的连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图,完成用户的请求。其示意图如下:

MTV

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些不同。

Django的MTV分别是指:

  • M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)。
  • T 代表模板(Template):负责如何把页面展示给用户(HTML)
  • V 代表视图(View):负责业务逻辑,并在适当时间调用Model 和Template

除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View 再调用相应的Model 和Template,MTV的相应模式如下

一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

下载Django

方式一、在命令行输入:pip3 install django==1.11.9 (后面可以不用写==1.11.9就是下载最新版本,it行业一般不会轻易去使用最新版本,因此建议下载1.11版本)

方式二、用pycharm安装

方式三、用pycharm的Terminal 的命令安装。

创建一个Django project

django-admin.py startproject mysite

当前目录下回生成mysite的工程。目录结构如下:

注:

  • manage.py-----Django项目里面的工具,通过它可以调用django shell 和数据库等
  • settings.py-----包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量
  • urls.py--------负责把URL模式映射到应用程序

在mysite目录下创建应用

python manage.py startapp blog

启动django项目

python manage.py runserver

注意事项

开启Django 需要注意一下几点坑:

  1. 计算机名称不能有中文
  2. 一个pycharm 窗口就是一个项目,不要讲多个项目放在一个窗口里面
  3. 项目名称不能写中文
  4. 网页中 需要右击检查,进入设置,将 浏览器设置为不记住缓存(如果后期不这么操作,会导致网页上不显示您希望的效果)

おすすめ

転載: www.cnblogs.com/qianzhengkai/p/10980705.html