Python 之 Django 框架
1、Django 简介
Python 下有多款不同的 web 框架,Django 是最有代表性的一种。许多成功的网站和 APP 都基于 Django。
Django 是一个开源的 Web 应用框架,由 Python 写成。
Django 采用了 MVC 的软件设计模式,即模型 M,视图 V 和控制器 C。2、Django 的特点
1) 强大的数据库功能:用 python 的类继承,几行代码就可以拥有一个动态的数据库操作 API,如果需要也能执行 SQL 语句。
2) 自带的强大的后台功能:几行代码就让网站拥有一个强大的后台,轻松管理内容。
3) 优雅的网址:用正则匹配网址,传递到对应函数。
4) 模板系统:强大,易扩展的模板系统,设计简易,代码和样式分开设计,更易管理。
5) 缓存系统:与 memcached 或其它缓存系统联用,表现更出色,加载速度更快。
6) 国际化:完全支持多语言应用,允许你定义翻译的字符,轻松翻译成不同国家的语言。3、Django 项目目录
1) urls.py:网址入口,关联到对应的 views.py 中的一个函数(或 generic 类),访问网址就对应一个函数。
2) views.py:处理用户发出的请求,与 urls.py 对应, 通过渲染 templates 中的网页可以将显示内容,如登陆后的用户名,用户请求的数据等输出到网页。
3) models.py:与数据库操作相关,存入或读取数据时用到,用不到数据库时可以不使用。
4) forms.py:表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作,也可以不使用。
5) templates 文件夹:views.py 中的函数渲染 templates 中的 html 模板,得到动态内容的网页,可以用缓存来提高速度。
6) admin.py:后台,可以用很少的代码就拥有一个强大的后台。
7) settings.py:Django 的配置文件,如 DEBUG 的开关,静态文件的位置等。4、Django 基本命令
1) 新建一个项目:
- django-admin.py startproject project-name
在 windows 上如果报错,尝试用 django-admin 代替 django-admin.py 。
2) 新建一个 APP:
- python manage.py startapp app-name
或
- django-admin.py startapp app-name
一般一个项目有多个 app, 当然通用的 app 也可以在多个项目中使用。
3) 启动服务器:
- python manage.py runserver 0.0.0.0:8000
或
- python manage.py runserver
前者让其它电脑可连接到服务器,监听机器上所有 ip 的 8000 端口,访问时用电脑的 ip 代替 127.0.0.1(8000 为端口号,如果不说明,则端口号默认为 8000);后者在本电脑访问服务器,访问时 ip 为 127.0.0.1。5、视图与网址
views.py:
- from django.http import HttpResponse
- def helloWorld(request):
- return HttpResponse("Hello world!")
urls.py:
- from django.conf.urls import url
- from . import view
- urlpatterns = [
- url(r'^$', view.helloWorld)
- ]
启动服务器,并在浏览器访问:127.0.0.1:8000。
修改后的 urls.py:
- from django.conf.urls import url
- from . import view
- urlpatterns = [
- url(r'^helloWorld$', view.helloWorld)
- ]
启动服务器,并在浏览器访问:127.0.0.1:8000/helloWorld。
url() 函数:可以接收四个参数,分别是两个必选参数 regex、view 和两个可选参数 kwargs、name:
①regex:正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。
②view:用于执行与正则表达式匹配的 URL 请求。
③kwargs:视图使用的字典类型的参数。
④name:用来反向获取 URL。6、Django 模板
1) 实例:
①在 app 目录中,创建 templates 目录并建立 helloWorld.html 文件:
- <h1>{{helloWorld}}</h1>
②向 Django 说明模板文件的路径,修改 settings.py 文件,修改 TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",]。
③修改 views.py:
- from django.shortcuts import render
- def hello(request):
- context = {}
- context['helloWorld'] = 'Hello World!'
- return render(request, 'helloWorld.html', context)
render 使用了一个字典 context 作为参数,context 字典中元素的键值 "helloWorld" 对应了模板中的变量 "{{helloWorld}}"。
④启动服务器,并在浏览器访问:127.0.0.1:8000/helloWorld。
2) Django 模板标签
①if/else 标签
if/else 支持嵌套,{% if %} 标签接受 and、or 或 not 关键字来对多个变量做判断,或对变量取反。
- {% if condition %}
- ...
- {% endif %}
或者:
- {% if condition1 %}
- ...
- {% elif condiiton2 %}
- ...
- {% else %}
- ...
- {% endif %}
②for 标签
{% for %} 允许在一个序列上迭代。支持嵌套。每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。
- <ul>
- {% for person in list %}
- <li>{{person.name}}</li>
- {% endfor %}
- </ul>
给标签增加一个 reversed 使得该列表被反向迭代:
- {% for person in list %}
- ...
- {% endfor %}
③ifequal/ifnotequal 标签
{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签。
- {% ifequal person1 person2 %}
- <h1>YES</h1>
- {% endifequal %}
④注释标签
Django 注释使用 {# #}。
⑤过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符:
{{name|lower}} 大写转换为小写。
一个过滤器管道的输出又可以作为下一个管道的输入:
{{name|first|upper}} 将第一个元素转化为大写。
有些过滤器有参数,过滤器的参数跟随冒号之后并总是以双引号包含:
{{name|truncatewords:"3"}} 显示变量的前 3 个词。
addslashes:添加反斜杠到任何反斜杠、单引号或者双引号前面。
date:按指定的格式字符串参数格式化 date 或 datetime 对象,如 {{pub_date|date:"F j, Y"}}。
length:返回变量的长度。
⑥include 标签
{% include %} 标签允许在模板中包含其它的模板的内容。
- {% include "test.html" %}
7、Django 模型
Django 对各种数据库提供了很好的支持,Django 为数据库提供了统一的调用 API,可以根据业务需求选择不同的数据库。
以 MYSQL 数据库为例,安装 mysql 驱动的命令:sudo pip install mysqlclient。
1) 数据库配置
在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'test',
- 'USER': 'test',
- 'PASSWORD': 'test123',
- 'HOST':'localhost',
- 'PORT':'3306',
- }
- }
这里添加了中文注释,所以需要在 settings.py 文件头部添加 # -*- coding: UTF-8 -*-。
2) 定义模型
①创建 APP:
Django 规定,如果要使用模型,必须要创建一个 app,使用以下命令创建一个 app:python manage.py startapp TestModel。
②修改 TestModel/models.py 文件:
- from django.db import models
- class Test(models.Model):
- name = models.CharField(max_length=20)
类名代表了数据库表名,且继承了 models.Model,类里面的字段代表数据表中的字段 (name),数据类型则由 CharField(相当于 varchar)、DateField(相当于 datetime), max_length 参数限定长度。
③在 settings.py 中找到 INSTALLED_APPS 这一项,添加:'TestModel'。
④在命令行中运行以下命令,创建数据表,表名为应用名_类名(如:TestModel_test):
- python manage.py migrate
- python manage.py makemigrations TestModel
- python manage.py migrate TestModel
3) 数据库操作
添加 database.py 文件:
- from django.http import HttpResponse
- from TestModel.models import Test
- def database(request):
- test = Test(name='Alice')
- test.save()
- return HttpResponse("<p> 数据添加成功!</p>")
修改 urls.py:
- from django.conf.urls import *
- from . import view,database
- urlpatterns = [
- url(r'^hello$', view.hello),
- url(r'^database$', database.database)
- ]
启动服务器,并在浏览器访问:127.0.0.1:8000/database。
①添加数据
- from django.http import HttpResponse
- from TestModel.models import Test
- def database(request):
- test = Test(name='Alice')
- test.save()
- return HttpResponse("<p> 数据添加成功!</p>")
②获取数据
- from django.http import HttpResponse
- from TestModel.models import Test
- def database(request):
-
- response = ""
- response1 = ""
-
- list = Test.objects.all()
-
- response2 = Test.objects.filter(id=1)
-
- response3 = Test.objects.get(id=1)
-
- Test.objects.order_by('name')[0:2]
-
- Test.objects.order_by("id")
-
- Test.objects.filter(name="Alice").order_by("id")
-
- for var in list:
- response1 += var.name + " "
- response = response1
- return HttpResponse("
" + response +
"</p>")
③更新数据
- from django.http import HttpResponse
- from TestModel.models import Test
- def database(request):
-
- test = Test.objects.get(id=1)
- test.name='Alice'
- test.save()
-
-
-
-
- return HttpResponse("<p> 数据修改成功 </p>")
④删除数据
删除数据库中的对象只需调用该对象的 delete() 方法即可:
- from django.http import HttpResponse
- from TestModel.models import Test
- def database(request):
-
- test = Test.objects.get(id=1)
- test.delete()
-
-
-
-
- return HttpResponse("<p> 数据删除成功 </p>")
8、Django 表单
1) Get 方法
①创建一个 search.py 文件,用于接收用户的请求:
- from django.http import HttpResponse
- from django.shortcuts import render_to_response
- def search_form(request):
- return render_to_response('search_form.html')
-
- def search(request):
- request.encoding='utf-8'
- if 'q' in request.GET:
- message = '搜索的内容为:' + request.GET['q'].encode('utf-8')
- else:
- message = '提交了空表单'
- return HttpResponse(message)
②在 templates 中添加 search_form.html 表单:
- >
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- </head>
- <body>
- <form action="/search" method="get">
- <input type="text" name="q">
- <input type="submit" value="搜索">
- </form>
- </body>
- </html>
③修改 urls.py:
- from django.conf.urls import url
- from . import view,database,search
- urlpatterns = [
- url(r'^helloWorld$', view.helloWorld),
- url(r'^database$', database.database),
- url(r'^search-form$', search.search_form),
- url(r'^search$', search.search)
- ]
④启动服务器,并在浏览器访问:127.0.0.1:8000/search_form。
2) Post 方法
①在 templates 中添加 post.html 表单:
- <!DOCTYPE html>
- <html>
- <head>
- "utf-8">
- <title></title>
- </head>
- <body>
- "/search-post" method="post">
- {% csrf_token %}
- "text" name="q">
- "submit" value="搜索">
- </form>
- <p>{{rlt}}</p>
- </body>
- </html>
来源: http://www.bubuko.com/infodetail-2444976.html