首页 > 代码库 > 1Python全栈之路系列之Django初体验

1Python全栈之路系列之Django初体验

Python全栈之路系列之Django初体验


Django不得不说在Python中是一个非常强大的全栈框架,而且入门也比较简单,只要你学完了基本的Django知识,接着再做一两个项目,不大不小就成,然后你再去学其它的框架你会发现,在那些小而美的框架中,你学起来将非常的快,因为你在学习Django的时候就已经学习并且体验过了Web开发流程,所以会有这么一个现象出现,有些新手朋友在学习FlaskTornado等小而美的框架时,很多概念不是很理解,比如ORM路由等,但你学Django就不会出现这种问题。


Django的历史

Django是从真实世界的应用中成长起来的,它是由堪萨斯(Kansas)州 Lawrence城中的一个网络开发小组编写的。 它诞生于2003 年秋天,那时Lawrence Journal-World报纸的程序员Adrian HolovatySimon Willison开始用Python来编写程序。

当时他们的World Online小组制作并维护当地的几个新闻站点, 并在以新闻界特有的快节奏开发环境中逐渐发展。这些站点包括有LJWorld.comLawrence.comKUsports.com, 记者(或管理层) 要求增加的特征或整个程序都能在计划时间内快速的被建立,这些时间通常只有几天或几个小时。因此,AdrianSimon 开发了一种节省时间的网络程序开发框架,这是在截止时间前能完成程序的唯一途径。

2005年的夏天,当这个框架开发完成时,它已经用来制作了很多个World Online的站点。当时World Online小组中的Jacob Kaplan-Moss 决定把这个框架发布为一个开源软件。

从今往后数年,Django是一个有着数以万计的用户和贡献者,在世界广泛传播的完善开源项目。原来的World Online的两个开发者(Adrian and Jacob)仍然掌握着Django,但是其发展方向受社区团队的影响更大。

摘录自djangobook3

Django访问流程

在学习Django之前让我们先来了解下Django的访问流程把,这是很重要的,便于你理解Django整个的工作流程是怎样的,当然我也把图画好了,如下图所示:

技术分享

解释下上面的图是如何工作的,先来拟这样一个环境,你打开了QQ空间,但是在你没有输入QQ账号和密码的情况下是不可以直接访问你的空间的,此时你需要输入账号密码才可以进入,假设你账号密码输出正确,自然而然的就进入了QQ空间,就以这个例子来描述上图的流程把:

  1. 用户打开了Google浏览器,输入QQ空间的URL,但是当前没有登录,需要输入账号密码,现在输入账号密码了,然后点击登录;

  2. 点击登录的这个请求首先会进入Django的路由系统(在路由前面其实还有中间件),代表你要访问哪一个资源,然后请求就被传给了对应路由的函数;

  3. 这个时候函数接到了用户传过来的账号密码,去数据库中(model,信号可以实现在数据库之前之后做些操作)做匹配;

  4. 当前用户名和密码正确,然后视图就会渲染页面;

  5. 把页面返回给浏览器,此时用户就进入了自己的QQ空间

安装Python

Django本身是纯Python编写的,所以安装框架的第一步是确保你已经安装了python2.x或者python3.x,你可以在https://www.python.org/downloads/这下载并安装python。

我这里已经安装好了Python3.x

$ python3 -V
Python 3.5.2

安装

目前我的操作系统是Mac并且已经配置安装好了pip3python3,我们可以直接使用pip来进行安装:

# 默认安装最近稳定版本
pip3 install django

指定安装django版本,这个知识虽然不是django内的,但还是要说一下

# 指定安装1.9版本
pip install django==1.9

目前最新稳定的版本是1.10,你可以进入Python解释器导入django模块来进行校验是否正确安装

>>> import django

如果在导入的时候没有报错就表示已经安装成功,否则你可以需要重新安装.

# 导入django
>>> import django
# 查看目前版本号
>>> django.get_version()
‘1.10.5‘

创建一个Django项目

django为我们提供了一个django-admin的指令,以方便与我们在命令行下创建django项目,可以使用django-admin --help查看该指令的帮助信息,当然如果你想这么做。

现在我们来看一下比较常用的一个参数把,这些参数都是通过django-admin --help得到的。

参数描述
startproject创建一个完整的项目
startapp创建一个app
runserver运行django为我们提供的http服务
shell进入待django环境的shell
makemigrations生成数据库命令
migrate执行生成好的数据库命令

然后让我们使用startproject来创建一个项目吧

$ django-admin startproject ansheng
$ cd ansheng/
$ ls
ansheng        manage.py

manage.py文件是一种命令行工具,允许你以多种方式与该Django项目进行交互,输入python manage.py help可以看到他为我们提供了那些指定,比如如下命令都是常用的:

指定描述
createsuperuser创建一个django后台的超级管理员
changepassword修改超级管理员的密码

貌似这两个也是最常用的,还有一个参数和上面django-admin --help是一样的, 请自行比较测试。

ansheng/settings.py该项目的全局配置文件,很重要。

ansheng/urls.py项目的路由配置文件,这是一个django项目的主入口文件。

还有一些其他不重要的文件就不做阐述了。

让Django项目运行起来

django内部是有一个内建的轻量的web开发服务器,在开发期间你完全可以使用内建的或者,从而免去了安装配置nginx或者apache等。

如果你还没启动服务器,请切换到你的项目目录里,运行下面的命令:

$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run ‘python manage.py migrate‘ to apply them.
August 08, 2016 - 11:29:42
Django version 1.10, using settings ‘mysite.settings‘
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

这将会在端口8000启动一个本地服务器, 并且只能从你的这台电脑连接和访问。 既然服务器已经运行起来了,现在用网页浏览器访问http://127.0.0.1:8000/。 你应该可以看到一个令人赏心悦目的淡蓝色Django欢迎页面。

技术分享

更改这个Development Server的主机地址或端口

默认情况下,runserver命令在8000端口启动开发服务器,且仅监听本地连接。 要想要更改服务器端口的话,可将端口作为命令行参数传入:

python manage.py runserver 8080

通过指定一个IP地址,你可以告诉服务器–允许非本地连接访问。 如果你想和其他开发人员共享同一开发站点的话,该功能特别有用。0.0.0.0这个IP地址,告诉服务器去侦听任意的网络接口。

python manage.py runserver 0.0.0.0:8000

完成这些设置后,你本地网络中的其它计算机就可以在浏览器中访问你的IP地址了。比如:http://192.168.1.103:8000/

实例

这个例子中我们会涉及到django的多方面知识,比如后面几章会学习到的路由视图模型模板后台管理等知识点。

那么这是个什么例子呢?其实是一个很简单的例子,怎么个简单法儿,后台添加用户,前台展示用户,很简单吧,那我们接下来就来实操吧。

继上面创建好的项目ansheng之上我们在创建一个appusers:

$ python manage.py startapp users

初次之外我们还需要把app注册到我们的项目中,可以在ansheng/settings.py中找到INSTALLED_APPS字典,把刚创建的APP名字添加进去:

INSTALLED_APPS = [
    ......
    ‘users‘,
]

因为需要用到html,所以我们也需要配置模板路径文件了,先创建一个存放模板文件的路径

$ mkdir templates

继续编辑settings.py,找到TEMPLATES,把DIRS修改如下:

‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)],

ansheng/urls.py中添加一条路由配置:

from django.conf.urls import url
from django.contrib import admin

# 导入app下面的视图函数users
from users.views import users

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    # 指定路由对应的函数
    url(r‘^users/$‘, users),
]

users/views.py视图函数内容如下:

from django.shortcuts import render

# 导入模型中的UserInfo表
from .models import UserInfo

# Create your views here.

def users(request):
    # 获取所有的用户
    all_user = UserInfo.objects.all()
    # 把用户信息和前端文件一起发送到浏览器
    return render(request, ‘users.html‘, {‘all_user‘: all_user})

template/users.html内容如下

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>

<ul>
    <!-- 循环传过来的所有用户,显示其用户名 -->
    {% for user in all_user %}
        <li>{{ user.name }}</li>
    {% endfor %}
</ul>

</body>
</html>

users/models.py配置文件

from django.db import models

__all__ = [
    ‘UserInfo‘
]

# Create your models here.

class UserInfo(models.Model):
    name = models.CharField(max_length=30, verbose_name=‘用户名‘)
    email = models.EmailField(verbose_name=‘用户邮箱‘)

users/admin.py配置文件

from django.contrib import admin
from .models import *

# Register your models here.

# 把UserInfo注册到admin中
admin.site.register(UserInfo)

最后我们生成数据库:

$ python manage.py makemigrations
$ python manage.py migrate

创建超级管理员用户

$ python manage.py createsuperuser
# 用户名
Username (leave blank to use ‘ansheng‘): ansheng
# 哟箱地址,可以为空
Email address: 
# 密码
Password: 
# 确认密码
Password (again): 
Superuser created successfully.

打开http://127.0.0.1:8000/admin/登录后台,输入我们刚才创建好的用户和密码

技术分享

找到我们刚才添加的app,然后点击ADD添加一个或多个用户:

技术分享

继续打开http://127.0.0.1:8000/users/就能够看到刚才添加的用户了,你可以试着再添加一个用户然后刷新页面,看看是否会显示出来你刚刚新添加的用户,完。

#Python全栈之路 #Django


1Python全栈之路系列之Django初体验