Python的Web应用框架--Django

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 一:简介      python的web框架有很多,个人查了一下,有Django、Pylons、 Tornado、Bottle和Flask等,其中使用人数最多的是Django,而我学习Django也是因为openstack中使用的是django框架。

一:简介

     python的web框架有很多,个人查了一下,有Django、Pylons、 Tornado、Bottle和Flask等,其中使用人数最多的是Django,而我学习Django也是因为openstack中使用的是django框架。

     Django是一个开放源代码的Web应用框架,由Python写成,采用了MVC的软件设计模式,即模型M,视图V和控制器C。

二:安装

由于Django2.0以后便不再支持python2.x,所以在安装时一定要注意。

2.1.Python3.x+Django2.x

安装python-setuptools

yum install python-setuptools

下载Django安装包

easy_install django

2.2.Python2.x+Django1.x

安装python-setuptools

yum install python-setuptools

下载Django安装包

下载源码包:https://www.djangoproject.com/download/

点击历史版本中的1.11版本下载。

输入以下命令并安装:

tar xzvf Django-X.Y.tar.gz    # 解压下载包
cd Django-X.Y                 # 进入 Django 目录
python setup.py install       # 执行安装命令

2.3检验

[root@solar django]# python
Python 2.7.3 (default, May 15 2014, 14:49:08)
[GCC 4.8.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION (1, 6, 5, 'final', 0) >>>

三:创建第一个项目

3.1创建并浏览器展示

这里要学会使用django-admin.py管理工具,来创建。

创建项目

django-admin.py  startproject  HelloWord

进入项目,查看目录结构

[root@localhost ~]# cd HelloWorld/
[root@localhost HelloWorld]# tree
.
├── HelloWorld          --------项目的容器
│   ├── __init__.py     --------一个空文件,告诉 Python 该目录是一个 Python 包
│   ├── settings.py     --------该djiango项目的设置、配置
│   ├── urls.py         --------该djiango项目的URL声明,一份由djiango驱动的网站“目录”
│   └── wsgi.py         --------一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
└── manage.py           --------一个非常实用的管理工具,可以实现与django的各种交互

1 directory, 5 files
[root@localhost HelloWorld]# 

启动服务器

python manage.py runserver 0.0.0.0:8000

再在浏览器中输入服务器IP:8000 

此时要注意:

1:关闭防火墙,

2:如果出现“dango error:DisallowedHost: Invalid HTTP_HOST header: ''. You may need to add u'' to ALLOWED_HOST”错误,就修改settings.py文件中

     ALLOWED_HOSTS = [‘*‘]  #在这里请求的host添加了*

3.2修改视图内容

1.在HelloWorld/HelloWorld目录中创建一个新文件 view.py 文件,并输入代码:

from django.http import HttpResponse
 
def hello(request):
    return HttpResponse("Hello world ! ")

 

2.在 urls.py 文件中注释原来的代码,添加如下代码

from django.conf.urls import url

from . import view

urlpatterns = [
    url(r'^$', view.hello),
]

 

然后启动django,访问浏览器出现如下内容

 

3.3修改URL

 修改urls.py代码,在其中添加如下红色类似字符

from django.conf.urls import url

from . import view

urlpatterns = [
    url(r'^yaohong$', view.hello),
]

 

然后启动django服务

再输入原来的服务器IP:8000会出现如下报错

因为需要再在端口号后面加入刚刚添加的字符,如下图所示

四:模板

 4.1实现模板数据分离

1.创建模板文件

在HelloWorld下创建创建templates文件夹再在文件夹下创建hello.html,HelloWorld/templates/hello.html

[root@bogon HelloWorld]# tree
.
├── db.sqlite3
├── HelloWorld
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── view.py
│   ├── view.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── manage.py
└── templates
    └── hello.html

2 directories, 13 files

 

 在hello.html中添加如下代码

<h1>{{ hello }}</h1>

 

2.在settings.py中配置模板路径

修改 TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'DIRS': [BASE_DIR+"/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', ], }, }, ]

 

3.在 view.py中想模板提交数据

在view.py中加入如下代码,其中“hello”为模板中的变量,“Hello Word! my name is yaohong”为提交的数据

from django.shortcuts import render

def hello(request):
    context          = {}
    context['hello'] = 'Hello World! my name is yaohong'
    return render(request, 'hello.html', context)

 

4.启动服务器

python manage.py runserver 0.0.0.0:8000

 在浏览器中输入地址

4.2Django模板标签

if/else 标签

{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3 {% endif %}

 

for 标签

{% for athlete in athlete_list %}
    <h1>{{ athlete.name }}</h1>
    <ul>
    {% for sport in athlete.sports_played %}
        <li>{{ sport }}</li>
    {% endfor %}
    </ul> {% endfor %}

ifequal/ifnotequal 标签

{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。

{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% endifequal %}

注释标签

{# 这是一个注释 #}

 

过滤器

#{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写
{{ name|lower }}
#将第一个元素并将其转化为大写。
{{ my_list|first|upper }}

 

include 标签

{% include "nav.html" %}

 

模板继承

 首先新建一个要被继承的文件,这里命名为base.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>继承的学习</title>
</head>
<body>
    <h1>Hello World!</h1>
    <p>我是继承过来的!!!</p>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
</body>
</html>

 

 再在hello.html继承base.html页面

{% extends "base.html" %}
<h1>{{ hello }}</h1>

{% block mainbody %}<p>继承了 base.html 文件</p>
{% endblock %}

 

 

五:模型

5.1安装mysql 

首先检查系统是否自带或者我们已经安装mysql,

rpm -qa | grep mysql

 

安装并启动mysql:

#非centos7版本
yum install mysql
yum install mysql-server
yum install mysql-devel
service mysqld start

 

#centos7版本执行如下
yum install mariadb-server mariadb

systemctl start mariadb  #启动MariaDB systemctl enable mariadb #设置开机启动

 

验证安装

执行下面语句会看到版本信息,如果没有任何输出,表示mysql没有安装成功

mysqladmin --version

 

设置用户

更改root密码

mysqladmin -u root password "new_password";

 

设置test用户密码

 mysql -u root -p
>GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost' \
    IDENTIFIED BY 'test123';
>GRANT ALL PRIVILEGES ON test.* TO 'test'@'%' \
    IDENTIFIED BY 'test123';

 

5.2修改相应配置

1.数据库配置

在HelloWorld/HelloWorld/settings.py下修改DATABASES{}如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test123', 'HOST':'localhost', 'PORT':'3306', } }

 

2.定义模型

创建APP

进入HelloWorld文件夹

django-admin.py startapp TestModel

 

创建完成后目录如下:

[root@localhost HelloWorld]# tree
.
├── db.sqlite3
├── HelloWorld
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── testdb.py
│   ├── testdb.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── view.py
│   ├── view.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── manage.py
├── templates
│   ├── base.html
│   └── hello.html
└── TestModel
    ├── admin.py
    ├── admin.pyc
    ├── apps.py
    ├── __init__.py
    ├── __init__.pyc
    ├── migrations
    │   ├── 0001_initial.py
    │   ├── 0001_initial.pyc
    │   ├── __init__.py
    │   └── __init__.pyc
    ├── models.py
    ├── models.pyc
    ├── tests.py
    └── views.py

4 directories, 29 files

 

修改HelloWorld/TestModel/models.py:

创建模型

# models.py
from django.db import models
 
class Test(models.Model):
    name = models.CharField(max_length=20)

 

修改settings.py

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages', 'django.contrib.staticfiles', 'TestModel', # 添加此项 )

 

执行下列命令

$ python manage.py migrate   # 创建表结构

$ python manage.py makemigrations TestModel  # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel   # 创建表结构

 

数据库操作

修改HelloWorld/HelloWorld/urls.py

from django.conf.urls import *
from . import view,testdb
 
urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
]

创建HelloWorld/HelloWorld/testdb.py

# -*- coding: utf-8 -*-
 
from django.http import HttpResponse
 
from TestModel.models import Test
 
# 数据库操作
def testdb(request):
    test1 = Test(name='runoob')
    test1.save()
    return HttpResponse("<p>数据添加成功!</p>")

 

然后在浏览器中输入IP:8000/testdb

 

 

 

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
25天前
|
存储 SQL 数据采集
Django框架的表单验证和过滤机制的原理是什么?
Django框架的表单验证和过滤机制的原理是什么?
107 73
|
12天前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
90 9
|
25天前
|
JSON 安全 中间件
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
65 15
|
21天前
|
关系型数据库 API 数据库
Python流行orm框架对比
Python中有多个流行的ORM框架,如SQLAlchemy、Django ORM、Peewee、Tortoise ORM、Pony ORM、SQLModel和GINO。每个框架各有特点,适用于不同的项目需求。SQLAlchemy功能强大且灵活,适合复杂项目;Django ORM与Django框架无缝集成,易用性强;Peewee轻量级且简单,适合小型项目;Tortoise ORM专为异步框架设计;Pony ORM查询语法直观;SQLModel结合Pydantic,适合FastAPI;GINO则适合异步环境开发。初学者推荐使用Django ORM或Peewee,因其易学易用。
|
25天前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
53 7
|
2月前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
83 7
|
2月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
102 2
|
2月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
9月前
|
开发框架 开发者 Python
深入探究Python Web开发框架:Flask与Django
Python作为一种广泛应用于Web开发的编程语言,其拥有众多优秀的Web开发框架。本文将深入探讨其中两大知名框架——Flask与Django。通过对它们的概念与实践进行比较分析,帮助读者更好地理解和选择适合自己项目需求的Web开发框架。