前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python的Web应用框架--Django

Python的Web应用框架--Django

作者头像
yaohong
发布2019-09-11 15:42:42
6870
发布2019-09-11 15:42:42
举报
文章被收录于专栏:姚红专栏姚红专栏

一:简介

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

代码语言:javascript
复制
yum install python-setuptools

下载Django安装包

代码语言:javascript
复制
easy_install django

2.2.Python2.x+Django1.x

安装python-setuptools

代码语言:javascript
复制
yum install python-setuptools

下载Django安装包

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

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

输入以下命令并安装:

代码语言:javascript
复制
tar xzvf Django-X.Y.tar.gz    # 解压下载包
cd Django-X.Y                 # 进入 Django 目录
python setup.py install       # 执行安装命令

2.3检验

代码语言:javascript
复制
[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管理工具,来创建。

创建项目

代码语言:javascript
复制
django-admin.py  startproject  HelloWord

进入项目,查看目录结构

代码语言:javascript
复制
[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]# 

启动服务器

代码语言:javascript
复制
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 文件,并输入代码:

代码语言:javascript
复制
from django.http import HttpResponse
 
def hello(request):
    return HttpResponse("Hello world ! ")

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

代码语言:javascript
复制
from django.conf.urls import url

from . import view

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

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

3.3修改URL

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

代码语言:javascript
复制
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

代码语言:javascript
复制
[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中添加如下代码

代码语言:javascript
复制
<h1>{{ hello }}</h1>
2.在settings.py中配置模板路径

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

代码语言:javascript
复制
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”为提交的数据

代码语言:javascript
复制
from django.shortcuts import render

def hello(request):
    context          = {}
    context['hello'] = 'Hello World! my name is yaohong'
    return render(request, 'hello.html', context)
4.启动服务器
代码语言:javascript
复制
python manage.py runserver 0.0.0.0:8000

在浏览器中输入地址

4.2Django模板标签

if/else 标签

代码语言:javascript
复制
{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

for 标签

代码语言:javascript
复制
{% 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 %} 之中所有的值。

代码语言:javascript
复制
{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% endifequal %}

注释标签

代码语言:javascript
复制
{# 这是一个注释 #}

过滤器

代码语言:javascript
复制
#{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写
{{ name|lower }}
#将第一个元素并将其转化为大写。

include 标签

代码语言:javascript
复制
{% include "nav.html" %}

模板继承

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

代码语言:javascript
复制
<!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页面

代码语言:javascript
复制
{% extends "base.html" %}
<h1>{{ hello }}</h1>

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

五:模型

5.1安装mysql

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

代码语言:javascript
复制
rpm -qa | grep mysql

安装并启动mysql:

代码语言:javascript
复制
#非centos7版本
代码语言:javascript
复制
yum install mysql
yum install mysql-server
yum install mysql-devel
service mysqld start
代码语言:javascript
复制
#centos7版本执行如下
代码语言:javascript
复制
yum install mariadb-server mariadb

验证安装

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

代码语言:javascript
复制
mysqladmin --version

设置用户

更改root密码

代码语言:javascript
复制
mysqladmin -u root password "new_password";

设置test用户密码

代码语言:javascript
复制
 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{}如下:

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test123',
        'HOST':'localhost',
        'PORT':'3306',
    }
}
2.定义模型

创建APP

进入HelloWorld文件夹

代码语言:javascript
复制
django-admin.py startapp TestModel

创建完成后目录如下:

代码语言:javascript
复制
[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:

创建模型

代码语言:javascript
复制
# models.py
from django.db import models
 
class Test(models.Model):
    name = models.CharField(max_length=20)

修改settings.py

代码语言:javascript
复制
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TestModel',               # 添加此项
)

执行下列命令

代码语言:javascript
复制
$ python manage.py migrate   # 创建表结构

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

数据库操作

修改HelloWorld/HelloWorld/urls.py

代码语言:javascript
复制
from django.conf.urls import *
from . import view,testdb
 
urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
]

创建HelloWorld/HelloWorld/testdb.py

代码语言:javascript
复制
# -*- 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:简介
  • 二:安装
    • 2.1.Python3.x+Django2.x
      • 2.2.Python2.x+Django1.x
        • 2.3检验
        • 三:创建第一个项目
          • 3.1创建并浏览器展示
            • 3.2修改视图内容
              • 3.3修改URL
              • 四:模板
                • 4.1实现模板数据分离
                  • 1.创建模板文件
                  • 2.在settings.py中配置模板路径
                  • 3.在 view.py中想模板提交数据
                  • 4.启动服务器
                • 4.2Django模板标签
                • 五:模型
                  • 5.1安装mysql
                    • 5.2修改相应配置
                      • 1.数据库配置
                      • 2.定义模型
                  相关产品与服务
                  云数据库 SQL Server
                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档