Python的Web应用框架--Django

小编 2026-07-05 阅读:1490 评论:0
一:简介     python的web框架有很多,个人查了一下,有Django、Pylons、 ...

一:简介

     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/

Python的Web应用框架--Django

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

输入以下命令并安装:

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

2.3检验

[root@solar django]# pythonPython 2.7.3 (default, May 15 2014, 14:49:08)[GCC 4.8.0] on linux2Type "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添加了*

Python的Web应用框架--Django

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 urlfrom . import viewurlpatterns = [    url(r'^$', view.hello),]

 

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

 

Python的Web应用框架--Django

3.3修改URL

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

from django.conf.urls import urlfrom . import viewurlpatterns = [    url(r'^yaohong$', view.hello),]

 

然后启动django服务

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

Python的Web应用框架--Django

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

Python的Web应用框架--Django

四:模板

 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.html2 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 renderdef 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

 在浏览器中输入地址

Python的Web应用框架--Django

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 %}

 

Python的Web应用框架--Django

 

五:模型

5.1安装mysql 

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

rpm -qa | grep mysql

 

安装并启动mysql:

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

 

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

systemctl start mariadb  #启动MariaDBsystemctl 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.py4 directories, 29 files

 

修改HelloWorld/TestModel/models.py:

创建模型

# models.pyfrom 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

 

 

Python的Web应用框架--Django

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

上一篇:Java多线程要点 下一篇:n皇后问题
热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表