最近接触了Python,用Scrapy框架写了一个小小的爬虫程序,面对抽取出来的数据,很想做一个可视化的界面对其进行操作,于是准备学习一下Python的web框架Django。
跟随django tutorial的脚步,我们来一步步走下去吧~
安装过程略过,默认已经安装好Django,可在控制台使用命令检查Django版本,因为我的python版本是3.6,所以安装的Django版本是2.0.1
python -m django --version
创建一个项目
用命令创建Django项目自动生成一些代码,一个Django实例设置集合、数据库配置、Django特定的选项、特定于应用程序的设置
django-admin startproject mysite
生成的项目结构
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
外层mysite 项目的container,可以任意改名
manage.py 命令行工具,可以以多种方式和Django project进行交互
里层mysite 项目实际的Python包,导入任何在其内部的东西都需要使用该包名
__init__.py 一个空文件,告诉python这个目录是一个python包
settings.py Django project的设置/配置
urls.py url声明,Django支持的站点目录
wsgi.py 一个兼容WSGI的web服务器为你的项目提供入口点
开发服务器
进入外层mysite目录,命令行键入以下命令启动django服务器
python manage.py runserver
启动成功后访问http://127.0.0.1:8000/,可以看到Welcome to Django欢迎页面。
Django开发服务器,是纯粹用python编写的轻量级web服务器,这是为了开发方便而包含在Django框架中的,仅仅用于开发环境而不是生产环境。
可以修改端口为8080
python manage.py runserver 8080
也可以修改服务器IP,如监听所有允许的IP(0是0.0.0.0的简写)
python manage.py runserver 0:8000
开发服务器会自动为每个请求重新加载Python代码,所以无需重启服务器以使代码生效,但添加文件等操作并不会触发重新启动,所以在这种情况下必须重新启动服务器。
下一步骤让我们创建一个投票(polls)应用
Django有个应用程序(app)的概念,应用程序是一个web应用程序,它会执行一些操作(如微博系统、公共档案数据库或简单的应用程序),项目(project)则是特定网站的配置和应用的集合,项目可以包含多个应用程序,一个应用程序也可以在多个项目中。
我们在manage.py的同级创建poll app,这样它就可以作为顶级模块来导入了。
使用命令:
python manage.py startapp polls
我们创建了一个目录polls,它的结构是这样的
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
在polls/views.py中编写代码:
1 from django.http import HttpResponse 2 3 4 def index(request): 5 return HttpResponse("Hello, world. You're at the polls index.")
想要调用该视图(view),我们需要将它映射到一个url,为此我们需要一个URLconf。在pools下创建urls.py文件。
pools/urls.py
1 from django.urls import path 2 3 from . import views 4 5 urlpatterns = [ 6 path('', views.index, name='index'), 7 ]
接下来,将根URLconf指向polls.urls模块。
mysite/urls.py
1 from django.urls import include, path 2 from django.contrib import admin 3 4 urlpatterns = [ 5 path('polls/', include('polls.urls')), 6 path('admin/', admin.site.urls), 7 ]
include()函数允许引用其他URLconf,当Django遇到include()时,切断与该点匹配的url,并且将剩余的字符串发送给包含的urlconf做进一步的处理。
这是一个即插即用的概念,不论把urls.py放到任何位置,应用都可以起作用。
如今,我们把index视图和urlconf连接起来了,现在我们用python manage.py runserve启动服务器,然后进入http://localhost:8000/polls/页面,如果配置正确,我们会看到index中返回的“Hello, world. You're at the polls index.”
Path()
path()函数有四个参数,两个必需的参数route和view,两个可选的参数kwargs和name
route:包含了URL模式(pattern)的字符串,在处理请求时,Django从网址模式中的第一个模式开始,在列表中依次向下,对每一个模式匹配请求URL,直到找到匹配的模式。
模式不搜索GET和POST参数和域名,比如在请求中
https://www.example.com/myapp/
, urlconf查找myapp/
https://www.example.com/myapp/?page=3
, urlconf也查找myapp/
view:当Django找到一个匹配的模式,它会调用指定的视图函数,将HttpRequest作为第一个参数,并将路径中的任何捕获值作为关键字参数。
kwargs:任意关键字参数能在字典中传给目标视图。
name:命名你的url可以让你在Django的任何位置明确引用它,特别是在内部模板中。这个强大的功能使您可以对项目的URL模式进行全局更改,同时只变动单个文件。