首先认识一下web开发框架
什么是web开发?, Web开发指的是开发基于B/S架构,通过前后端的配合,将后台服务器的数据在浏览器上展现给前台用户的应用。比如将电子购物网站的商品数据在浏览器上展示给客户,在基于浏览器的学校系统管理平台上管理学生的数据,监控机房服务器的状态并将结果以图形化的形式展现出来等等。
所以就有了如下代码:
import pymysql
print("Content-Type: text/html\n")
print("<html><head><title>products</title></head>")
print("<body>")
print("<h1>products</h1>")
print("<ul>")
connection = pymysql.connect(user='user', passwd='pwd', db='product_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM products ORDER BY create_date DESC LIMIT 10")
for row in cursor.fetchall():
print("<li>%s</li>" % row[0])
print("</ul>")
print("</body></html>")
connection.close()
以上是使用CGI标准开发的一个web应用。
我们可以看到, 首先就是打印一下html标记, 然后构造SQL查询语句对数据库进行查询,之后把打印结果插入到原有的网页中。
首先,这个过程看上去很简单,但是功能太特定化了,只能针对某一中特定的请求进行响应。
- 如果应用中有多处需要连接数据库会怎样呢?每个独立的CGI脚本,不应该重复编写数据库连接相关的代码。
- 前端、后端工程师以及数据库管理员集于一身,无法分工配合。设想一个前端设计师,完全没有Python开发经验,但是又需要编写SQL语句的话,会发生什么呢?(我有一句话不知当讲不当讲?)
- 如果代码被重用到一个复合的环境中会发生什么?
- 直接将数据库的密码写在代码里吗?
- 今天是取十个商品,明天我要删除十个商品怎么办?
于是人们发现,以下过程是可以不断地重复的。
开始编写一个新的Web应用
开始编写另一个Web应用
从第一步中总结经验(找出其中通用的代码),并运用在第二步中
重构代码使得能在第二个应用中使用第一个程序中的通用代码
重复2-4步若干次
发明了一个Web框架。
于是一个web框架就诞生了。
web框架
Django框架
而我所要学习的Django框架,就是其中之一,
Django基于MVC模型, 也就是model, view , 和controller
利用Django进行开发
- 新建项目
$ django-admin startproject mysite
这时候就新建了一个项目,但是注意的时候项目的名字尽量不要取一些特殊意义的名词
一个新建立的项目大致如下:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
manage.py是一个和命令行工具进行交互的脚本,启动Django就需要它
其他的内容以后会提到。
- 启动开发服务器
$ python manage.py runserver
这时候一个本地的服务器就搭建起来了
如果需要修改运行的端口或者ip地址,可以采取如下方式
$ python manage.py runserver 0.0.0.0:8000
- 创建应用app
一个app实现某个功能,比如博客
一个project包含多个app,这些app组合成整个站点
一个app可以属于多个project!
进入目录下之后,运行如下命令可以生成一个app
$ python manage.py startapp polls
系统会自动生成一个app
目录结构如下:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
- 编写第一个视图
在polls/views.py
文件中, 编写如下代码:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
第一步先导入相关的包,然后定义一个index函数,从名字上来看就是你网站的主页, 返回一个http的response(从名字上看得出来)
为了调用这个视图, 我们还需要编写路由,也就是urlconf
在polls里面新建一个文件,名字叫urls.py
输入如下代码:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
.代表当前目录,也就是从当面目录下导入views.py
文件
urlpatterns 其实就是用一个正则表达式,去匹配浏览器导航框里面的字符
此时的目录结构如下:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
接下来,在项目的主urls
文件中,添加urlpattern
条目,指向我们刚刚建立的polls这个app独有的urls
文件, 这里需要导入include
模块。
打开mysite/urls.py
文件,添加如下代码:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', admin.site.urls),
]
include 语法相当于多级路由,把接收到的url地址去除前面的正则表达式,将剩下的字符串传递给下一级路由进行判断。
网友评论