python之web框架django

        Web服务器和应用服务器以及web应用框架:

web服务器:负责处理http请求,响应静态文件,常见的有 Apache, Nginx 以及微软的 IIS 等.
应用服务器:负责处理逻辑的服务器。比如Java、php 、Python 的代码,是不能直接通过 Nginx 这种web服务器来处理的,只能通过应用服务器来处理,常见的应用服务器有 uwsgi 、 tomcat 等。
web应用框架:一般使用某种语言,封装了常用的 web 功能的框架就是web应用框架, flask 、 Django 以及Java中的 SSM(Spring+SpringMVC+MyBatis) 等框架都是web应用框架。 

python之web框架django_第1张图片   一般开发一个web项目,首先考虑的就是web服务器架构选择(LAMP或者LNMP等),接下来才是针对模块进行开发。

        Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架,前者的代表有Struts和Spring MVC等,后者的成员则有JSF、Tapestry等等,常见的架构有MVC和CMS两种。Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准样板以及会话管理等,可提升代码的可再用性。python之web框架django_第2张图片常用的web开发框架根据不同语言罗列如下:

PHP

  • Zend framework
  • CakePHP
  • Yii
  • ThinkPHP
  • symfony
  • kohanaphp
  • Seagull
  • Drupal
  • CodeIgniter

Python

  • django
  • pinax
  • Grok
  • Pylons
  • TurboGears
  • web2py
  • Zope
  • Quixote
  • snakelets
  • snakelets
  • PylonsHQ
  • Tornado

javascript

  • jQuery
  • MooTools
  • prototype
  • dojo
  • zk
  • Backbone.js
  • SproutCore
  • Sammy.js
  • Spine.js
  • Cappuccino
  • Knockout.js
  • Javascript MVC
  • GWT(Google Web Toolkit)
  • Google Closure
  • Ember.js
  • Angular.js
  • Batman.js
  • ExtJS

JAVA

  • Spring
  • Hibernate
  • Grails
  • Tapestry
  • ZK
  • SpringMVC
  • Struts2
  • Struts
  • Mybatis

Ruby

  • Ruby On Rails
  • Sinatra

.net

  • mvc
  • 三层
  • nhibernate

下面就python中常用的django框架进行阐述。


(1)初步了解Django

      Django是用python语言写的开源web开发框架,并遵循MVC设计,对比同源的Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。其具有以下特点,

  • 封装:大量的功能封装
  • 简化:把相对复杂的功能进行封装后做到简化
  • 优化:后台py代码优化提升效率
  • 漏洞:弥补了已知网站传输漏洞,如sql注入
  • 管理:框架以模块划分,分别负责不同的功能,清晰易于管理

     Django遵循的MVC设计与传统的MVC结构存在一定差异,故也常常被称为MTV结构

python之web框架django_第3张图片

其整个流程如下,

python之web框架django_第4张图片

利用django开始构建一个工程,具体操作如下,

python之web框架django_第5张图片

具体的指令如下

 

创建项目:django-admin startproject mainproject
创建APP(进入项目目录):python manage.py startapp firstWEB
创建库表(进入项目目录):python manage.py makemigrations
执行库表建立(进入项目目录):python manage.py migrate
创建超级管理者(及设置admin登录账号和密码):python manage.py createsuperuser
启动django项目:python manage.py runserver  

模板渲染嵌入语法:在html中可以嵌入后台语言 区分符号为 {%命令%}  {{变量}}
                 需要注意的是,如果想嵌入for循环,需要在结束后添加{%endfor%},如
                    {% for data in datas %}
                    
                    {{ data.value_a }}
                    {{ data.value_b }}
                    {{ data.result }}
                    
                    {% endfor %}

建好后,项目目录如下

python之web框架django_第6张图片

其结构如下(大同小异),mainproject是一个项目,firstWEB是项目下的应用之一,可以使用创建命令创建更多的应用。

  • 其中mainproject项目文件夹和其下的mainproject文件夹: 执行django-admin startproject mainproject创建项目时自动创建
  • manage.py: 同上也是执行django-admin startproject mainproject时自动创建,它是django的任务管理命令行工具。
  • firstWEB文件夹和migrations文件夹: 是执行python manage.py startapp firstWEB创建应用时自动创建。
  • db.sqlite3: 是创建应用,简单运行后自动添加的sqlite3数据库,在django中是默认使用这个(如需配置其配置路径为./my_site/settings.py)。
  • mainproject中的settings.py: 这个文件中包括了项目的初始化设置,可以针对整个项目进行有关参数配置,比如配置数据库、添加应用等。
  • mainproject中的urls.py: 这是一个总的URL配置表文件,主要是将URL映射到应用程序上。当用户请求某个URL时,django会根据这个文件夹中的映射关系指向某个目标对象,该对象可以是某个应用中的urls.py文件,也可以是某个具体的视图函数。在django中,这个文件也被称为URLconf,这是django非常强大的一个特性。
  • mainproject中的wsgi.py: WSGI是 Web Server Gateway Interface缩写,它是python所选择的服务器和应用标准,django也会使用。wsgi.py定义了我们所创建的项目都是WSGI应用。
  • 如果你还看到了__pycache__文件夹: 它是执行python manage.py runserver命令时自动创建,它是一个编译后的文件夹,里面放的是一些pyc结尾的文件。
  • firstWEB中的admin.py: 这个文件中可以自定义django管理工具,比如设置在管理界面能够管理的项目,或者通过重新定义与系统管理有关的类对象,向管理功能增加新的内容。
  • firstWEB中的apps.py: 这个文件时django1.10之后增加的,通常里面包含对应用的配置。
  • blog中的migration目录: 用于存储应用的数据表结构的指令,通过这些指令可以修改和创建数据库,从而在models.py模型类和数据库表之间迁移。
  • firstWEB中的modles.py: 这是应用的数据类型,每个django应用都应当有一个 modles.py文件,虽然该文件可以为空,但不宜删除,这里就是编写模型类的地方。
  • firstWEB中的tests.py: 在这个文件中可以编写测试文档来测试所建立的应用。
  • firstWEB中的views.py: 这是一个重要的文件,用户保存响应各种请求的函数或者类。如果编写的是函数,则称为基于函数的视图;如果编写的是类,则称之为基于类的视图。views.py就是保存函数或者类的视图文件。当然也可以用其他的文件名称,只不过在引入响应函数或者类时,要注意名称的正确性,views.py是我们习惯使用的文件名称。
  • 配置模板的路径,即template文件夹,这一般为自己手动建立,可放在应用文件夹下也可以放在外面,主要用来存放前端的html文件。使用时需要在项目的setting.py文件中进行配置。
  • 配置静态目录,即static文件夹,同样需要手动创建,主要存放css和js这些静态文件,在setting.py中进行设置。

(2)实例

     此次实例是以b站up主的教程为例,主要完成以下功能:

  • 新建一个django工程
  • 创建一个app,即生成一个网站
  • 创建model,创建数据表(库,有几个简单的字段)
  • 创建一个渲染模板页面并需要完成一个运算功能(加法)
  • 每次运算结果保存起来
  • 通过model读取全部的运算结果
  • 前端页面呈现数据库里的结果
  • 前端加一个清库功能,一键删除数据库内容

》首先前期的环境准备在这里就不赘述了,通过anaconda安装虚拟环境和django库,这里我使用的是win10下python3.7,django2.2, pycharm进行开发配置的 ,接着按照上面新建项目和app的方法,对此进行一一构建,同时添加一个template文件夹,用于存放前端html文件,最后效果如下,

python之web框架django_第7张图片

接下来我们需要做的是在setting.py文件中做如下修改

python之web框架django_第8张图片

如果同时想要修改语言与时区,可同时在setting.py中进行如下修改

LANGUAGE_CODE = 'zh-Hans'  ###en-us 修改为中文

TIME_ZONE = 'Asia/Shanghai'  ##UTC修改为中国时间

这个时候如果无误的话,启动项目,在浏览器中输入http://127.0.0.1:8000/会出现以下页面,即表示初步建立成功。

python之web框架django_第9张图片

》接下来,需要做的就是添加页面与逻辑功能,同时关联其前后端操作

首先在firstWEB文件夹下的views.py文件中,添加逻辑函数

from django.shortcuts import render
from firstWEB.models import *
from django.http import HttpResponse

# Create your views here.

def index(request):
    return render(request,'index.html')

这句话就是告诉渲染index.html文件,接着在新建的template文件夹下添加一个index.html文件,里面内容如下




    
    my first web from django


my first django website

最后需要做的就是告诉router路由进行映射,在项目文件下的urls.py文件中添加如下内容

from django.contrib import admin
from django.urls import path  ##django 1.x版本用的是url来正则匹配,后面版本直接用path来实现
from firstWEB import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('abc/',views.index)  ###在这里用abc还是index都行,只是用来做映射,在网页端输入对应即可
]

这时候在去浏览器中输入http://127.0.0.1:8000/abc/,即可出现以下界面

python之web框架django_第10张图片

接下来的操作同上,在views.py中分别添加计算页与返回结果页

def CalPage(request):
    return render(request,'cal.html')

def Cal(request):  ###返回结果
    if request.POST:
        value_a,value_b=request.POST["valueA"],request.POST["valueB"]
        result=int(value_a)+int(value_b)
        # print(value_a,value_b)
        return render(request,'result.html',context={"data":result})
    else:
        return HttpResponse("please visit us with POST")

同时在template下添加cal.html文件




    
    计算页面


{% csrf_token %} 第一个数字: + 第二个数字:

以及result.html文件




    
    结果页面


计算结果是:

{{data}}

然后再在urls.py文件中添加对应映射即可,最后在浏览器中检验结果。

》关联数据库

    最后假如我们想将结果写入到数据库中,这时候我们需要在应用项目文件夹下的models.py文件进行修改

from __future__ import unicode_literals
from django.db import models

# Create your models here.
###类似于对表的描述
class cal(models.Model):
    value_a=models.CharField(max_length=10)
    value_b=models.FloatField(max_length=10)
    result=models.CharField(max_length=30)

然后利用以下命令来生成数据库

python manage.py makemigration

python manage.py migrate

这个时候打开数据库就可以看到建好的数据库了,然后在views.py中,我们需要将前端操作的结果写入到数据库中

  • 在Cal函数中添加
###开始写入sql-lite数据库
cal.objects.create(value_a=value_a,value_b=value_b,result=result)
  • 添加读取操作和删除操作
def CalList(request):
    datas=cal.objects.all()
    # for data in datas:
    #     print(data.value_a,data.value_b,data.result)
    return render(request,'list.html',context={"datas":datas})

def DelData(request):
    cal.objects.all().delete()
    return HttpResponse('data deleted')

对应的在templates下添加list.html文件




    
    Cal list



    {% for data in datas %}
    
    {% endfor %}
valueA valueB result
{{ data.value_a }} {{ data.value_b }} {{ data.result }}
{% csrf_token %}

然后再在urls.py中添加映射即可。最后显示的界面结果如下

python之web框架django_第11张图片

点击清库后,数据库清空,页面显示data deleted。


(3)补充点

》ORM(object relationship mapping)

表示对象-关系映射的缩写,实际上就是一种把数据库映射成对象的想法

  • 数据库的表(table) --> 类(class)
  • 记录(record,行数据)--> 对象(object)
  • 字段(field)--> 对象的属性(attribute)

比如说查询语句 SELECT id, first_name, last_name, phone, birth_date, sex FROM persons WHERE id = 10

对应到代码就是

res = db.执行数据库(sql);
name = res[0]["FIRST_NAME"];

那么ORM的写法就是

p = Person.get(10);
name = p.first_name;

这样的好处就是可以不需要了解数据库底层,因为它不需要接触SQL语句

》django

Django1.x中的正则形式去匹配链接,但是怎么匹配,网页都是弹出page not found错误,显示找不到链接,不得已的情况下将path换为了url发现网页能够正常匹配显示。通过查阅相关文档发现,Django2.x中的path不支持正则匹配,但在同一目录下的re_path与Django1.x中的url功能大部分相同可以替代url。

 

参考链接:
https://blog.csdn.net/Best_fish/article/details/84307045(Django框架和Tornado框架的区别)

https://www.cnblogs.com/yangmeichong/p/11303746.html(python之Djiango框架简介)

https://code.ziqiangxuetang.com/django/django-views-urls.html(Django 2.2 基础教程

你可能感兴趣的:(#,Python,科研生活,web服务器,前后端,全栈,Django)