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) 新建一个项目:

[python] view plain copy

  1. django-admin.py startproject project-name

在 windows 上如果报错,尝试用 django-admin 代替 django-admin.py 。

2) 新建一个APP:

[python] view plain copy

  1. python manage.py startapp app-name

[python] view plain copy

  1. django-admin.py startapp app-name

一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。

3) 启动服务器:

[python] view plain copy

  1. python manage.py runserver 0.0.0.0:8000

[python] view plain copy

  1. python manage.py runserver

前者让其它电脑可连接到服务器,监听机器上所有ip的8000端口,访问时用电脑的ip代替 127.0.0.1(8000为端口号,如果不说明,则端口号默认为8000);后者在本电脑访问服务器,访问时ip为127.0.0.1。

5、视图与网址

views.py:

[python] view plain copy

  1. from django.http import HttpResponse
  2. def helloWorld(request):
  3. return HttpResponse("Hello world! ")

urls.py:

[python] view plain copy

  1. from django.conf.urls import url
  2. from . import view
  3. urlpatterns = [
  4. url(r‘^$‘, view.helloWorld)
  5. ]

启动服务器,并在浏览器访问:127.0.0.1:8000。

修改后的urls.py:

[python] view plain copy

  1. from django.conf.urls import url
  2. from . import view
  3. urlpatterns = [
  4. url(r‘^helloWorld$‘, view.helloWorld)
  5. ]

启动服务器,并在浏览器访问: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文件:

[html] view plain copy

  1. <h1>{{ helloWorld }}</h1>

② 向Django说明模板文件的路径,修改settings.py文件,修改 TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",]。

③ 修改views.py:

[python] view plain copy

  1. from django.shortcuts import render
  2. def hello(request):
  3. context = {}
  4. context[‘helloWorld‘] = ‘Hello World!‘
  5. 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关键字来对多个变量做判断,或对变量取反。

[python] view plain copy

  1. {% if condition %}
  2. ...
  3. {% endif %}

或者:

[python] view plain copy

  1. {% if condition1 %}
  2. ...
  3. {% elif condiiton2 %}
  4. ...
  5. {% else %}
  6. ...
  7. {% endif %}

② for 标签

{% for %} 允许在一个序列上迭代。支持嵌套。每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。

[python] view plain copy

  1. <ul>
  2. {% for person in list %}
  3. <li>{{ person.name }}</li>
  4. {% endfor %}
  5. </ul>

给标签增加一个 reversed 使得该列表被反向迭代:

[python] view plain copy

  1. {% for person in list %}
  2. ...
  3. {% endfor %}

③ ifequal/ifnotequal 标签

{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签。

[python] view plain copy

  1. {% ifequal person1 person2 %}
  2. <h1>YES</h1>
  3. {% endifequal %}

④ 注释标签

Django 注释使用 {# #}。

⑤ 过滤器

模板过滤器可以在变量被显示前修改它,过滤器使用管道字符:

{{ name|lower }}大写转换为小写。

一个过滤器管道的输出又可以作为下一个管道的输入:

{{ name|first|upper }}将第一个元素转化为大写。

有些过滤器有参数,过滤器的参数跟随冒号之后并总是以双引号包含:

{{ name|truncatewords:"3" }}显示变量的前3个词。

addslashes:添加反斜杠到任何反斜杠、单引号或者双引号前面。

date:按指定的格式字符串参数格式化date或datetime对象,如{{ pub_date|date:"F j, Y" }}。

length:返回变量的长度。

⑥ include 标签

{% include %} 标签允许在模板中包含其它的模板的内容。

[python] view plain copy

  1. {% include "test.html" %}

7、Django模型

Django 对各种数据库提供了很好的支持,Django 为数据库提供了统一的调用API,可以根据业务需求选择不同的数据库。

以MYSQL数据库为例,安装 mysql 驱动的命令:sudo pip install mysqlclient。

1) 数据库配置

在项目的settings.py文件中找到 DATABASES 配置项,将其信息修改为:

[python] view plain copy

  1. DATABASES = {
  2. ‘default‘: {
  3. ‘ENGINE‘: ‘django.db.backends.mysql‘, # 或者使用 mysql.connector.django
  4. ‘NAME‘: ‘test‘,
  5. ‘USER‘: ‘test‘,
  6. ‘PASSWORD‘: ‘test123‘,
  7. ‘HOST‘:‘localhost‘,
  8. ‘PORT‘:‘3306‘,
  9. }
  10. }

这里添加了中文注释,所以需要在settings.py 文件头部添加 # -*- coding: UTF-8 -*-。

2) 定义模型

① 创建APP:

Django规定,如果要使用模型,必须要创建一个app,使用以下命令创建一个app:python manage.py startapp TestModel。

② 修改 TestModel/models.py 文件:

[python] view plain copy

  1. from django.db import models
  2. class Test(models.Model):
  3. name = models.CharField(max_length=20)

类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。

③ 在settings.py中找到INSTALLED_APPS这一项,添加:‘TestModel‘。

④ 在命令行中运行以下命令,创建数据表,表名为应用名_类名(如:TestModel_test):

[python] view plain copy

  1. python manage.py migrate   # 创建表结构
  2. python manage.py makemigrations TestModel  # 让Django知道模型有一些变更
  3. python manage.py migrate TestModel   # 创建表结构

3) 数据库操作

添加database.py文件:

[python] view plain copy

  1. from django.http import HttpResponse
  2. from TestModel.models import Test
  3. def database(request):
  4. test = Test(name=‘Alice‘)
  5. test.save()
  6. return HttpResponse("<p>数据添加成功!</p>")

修改 urls.py:

[python] view plain copy

  1. from django.conf.urls import *
  2. from . import view,database
  3. urlpatterns = [
  4. url(r‘^hello$‘, view.hello),
  5. url(r‘^database$‘, database.database)
  6. ]

启动服务器,并在浏览器访问:127.0.0.1:8000/database。

① 添加数据

[python] view plain copy

  1. from django.http import HttpResponse
  2. from TestModel.models import Test
  3. def database(request):
  4. test = Test(name=‘Alice‘)
  5. test.save()
  6. return HttpResponse("<p>数据添加成功!</p>")

② 获取数据

[python] view plain copy

  1. from django.http import HttpResponse
  2. from TestModel.models import Test
  3. def database(request):
  4. # 初始化
  5. response = ""
  6. response1 = ""
  7. # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
  8. list = Test.objects.all()
  9. # filter相当于SQL中的WHERE,可设置条件过滤结果
  10. response2 = Test.objects.filter(id=1)
  11. # 获取单个对象
  12. response3 = Test.objects.get(id=1)
  13. # 限制返回的数据,相当于SQL中的OFFSET 0 LIMIT 2;
  14. Test.objects.order_by(‘name‘)[0:2]
  15. # 数据排序
  16. Test.objects.order_by("id")
  17. # 上面的方法可以连锁使用
  18. Test.objects.filter(name="Alice").order_by("id")
  19. # 输出所有数据
  20. for var in list:
  21. response1 += var.name + " "
  22. response = response1
  23. return HttpResponse("<p>" + response + "</p>")

③ 更新数据

[python] view plain copy

  1. from django.http import HttpResponse
  2. from TestModel.models import Test
  3. def database(request):
  4. # 修改id=1的name字段再save,相当于SQL中的UPDATE
  5. test = Test.objects.get(id=1)
  6. test.name=‘Alice‘
  7. test.save()
  8. # 另一种方式
  9. # Test.objects.filter(id=1).update(name=‘Alice)
  10. # 修改所有的列
  11. # Test.objects.all()..update(name=‘Google‘)
  12. return HttpResponse("<p>数据修改成功</p>")

④ 删除数据

删除数据库中的对象只需调用该对象的delete()方法即可:

[python] view plain copy

  1. from django.http import HttpResponse
  2. from TestModel.models import Test
  3. def database(request):
  4. # 删除id=1的数据
  5. test = Test.objects.get(id=1)
  6. test.delete()
  7. # 另外一种方式
  8. # Test.objects.filter(id=1).delete()
  9. # 删除所有数据
  10. # Test.objects.all().delete()
  11. return HttpResponse("<p>数据删除成功</p>")

8、Django表单

1) Get方法

① 创建一个 search.py 文件,用于接收用户的请求:

[python] view plain copy

  1. from django.http import HttpResponse
  2. from django.shortcuts import render_to_response
  3. # 表单
  4. def search_form(request):
  5. return render_to_response(‘search_form.html‘)
  6. # 接收请求数据
  7. def search(request):
  8. request.encoding=‘utf-8‘
  9. if ‘q‘ in request.GET:
  10. message = ‘搜索的内容为: ‘ + request.GET[‘q‘].encode(‘utf-8‘)
  11. else:
  12. message = ‘提交了空表单‘
  13. return HttpResponse(message)

② 在templates中添加 search_form.html 表单:

[html] view plain copy

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form action="/search" method="get">
  9. <input type="text" name="q">
  10. <input type="submit" value="搜索">
  11. </form>
  12. </body>
  13. </html>

③ 修改urls.py:

[python] view plain copy

  1. from django.conf.urls import url
  2. from . import view,database,search
  3. urlpatterns = [
  4. url(r‘^helloWorld$‘, view.helloWorld),
  5. url(r‘^database$‘, database.database),
  6. url(r‘^search-form$‘, search.search_form),
  7. url(r‘^search$‘, search.search)
  8. ]

④ 启动服务器,并在浏览器访问:127.0.0.1:8000/search_form。

2) Post方法

① 在templates中添加 post.html 表单:

[python] view plain copy

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form action="/search-post" method="post">
  9. {% csrf_token %}
  10. <input type="text" name="q">
  11. <input type="submit" value="搜索">
  12. </form>
  13. <p>{{ rlt }}</p>
  14. </body>
  15. </html>

{% csrf_token %}标签:csrf 全称是 Cross Site Request Forgery,这是Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签。

② 新建 search2.py 文件并使用 search_post 函数来处理 POST 请求:

[python] view plain copy

  1. from django.shortcuts import render
  2. from django.views.decorators import csrf
  3. # 接收POST请求数据
  4. def search_post(request):
  5. ctx ={}
  6. if request.POST:
  7. ctx[‘rlt‘] = request.POST[‘q‘]
  8. return render(request, "post.html", ctx)

③ 修改urls.py:

[python] view plain copy

  1. from django.conf.urls import url
  2. from . import view,database,search
  3. urlpatterns = [
  4. url(r‘^helloWorld$‘, view.helloWorld),
  5. url(r‘^database$‘, database.database),
  6. url(r‘^search-form$‘, search.search_form),
  7. url(r‘^search$‘, search.search)
  8. url(r‘^search-post$‘, search2.search_post)
  9. ]

④ 启动服务器,并在浏览器访问:127.0.0.1:8000/search_post。

原文地址:https://www.cnblogs.com/chengjian-physique/p/8146722.html

时间: 2024-10-28 15:29:44

Python之Django框架的相关文章

在Python的Django框架中加载模版的方法

在Python的Django框架中加载模版的方法 为了减少模板加载调用过程及模板本身的冗余代码,Django 提供了一种使用方便且功能强大的 API ,用于从磁盘中加载模板, 要使用此模板加载API,首先你必须将模板的保存位置告诉框架. 设置的保存文件就是settings.py. 如果你是一步步跟随我们学习过来的,马上打开你的settings.py配置文件,找到TEMPLATE_DIRS这项设置吧. 它的默认设置是一个空元组(tuple),加上一些自动生成的注释. TEMPLATE_DIRS =

Python的Django框架中的Context使用

Python的Django框架中的Context使用 一旦你创建一个 Template 对象,你可以用 context 来传递数据给它. 一个context是一系列变量和它们值的集合. context在Django里表现为 Context 类,在 django.template 模块里. 她的构造函数带有一个可选的参数: 一个字典映射变量和它们的值. 调用 Template 对象 的 render() 方法并传递context来填充模板: >>> from django.template

Python的Django框架中的Cookie相关处理

Python的Django框架中的Cookie相关处理 浏览器的开发者在很早的时候就已经意识到, HTTP's 的无状态会对Web开发者带来很大的问题,于是(cookies)应运而生. cookies 是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies 来看看它是怎么工作的. 当你打开浏览器并访问 google.com ,你的浏览器会给Google发送一个HTTP请求,起始部分就象这样: GET / HTTP/1.1 Host:

Python之Django框架执行流程简介

我为大家简单阐述一下Django框架执行的大概流程. Django框架的执行流程    1.浏览器发送请求    2.服务器接收请求并将请求转发给Django框架    3.框架处理请求,如果是请求数据就去找model,如果请求时模版就去找template,然后将模板或数据读取并返回给服务器一个相应.    4.服务器再将相应转发给客户端 原文地址:https://www.cnblogs.com/chao666/p/12093912.html

Python的Django框架完成一个完整的论坛(源码以及思路)

一个完整的论坛,登录.注册.发表.头像.点赞.评论.分页.阅读排行等 使用Django2,Python3.5 开发工具:Pycharm5 需要的知识:Python基础知识,Django原理的理解以及使用,HTML,CSS,JS,jQuery等前端知识的简单理解,对数据库的简单理解 需要的知识可以参考的我的CSDN博客:http://blog.csdn.net/qq_41144008 源码 1:http://www.cnblogs.com/xuyiqing/p/8274959.html 2:htt

Python 安装 django框架

1.安装 pip install django 2.创建项目 d:/www/django文件夹下右键->打开dos窗口 输入: python C:\ProgramData\Miniconda3\Scripts\django-admin.py startproject novelnet 回车 d:/www/django下创建一novelnet项目(文件夹) 3.创建模板文件夹 novelnet同级目录下创建manager文件夹, 创建manager/templates文件夹 4.settings.

Python:Django框架开发数据可视化网站

Step 0: 使用新的 virtualenv 环境 建议使用 1.11.4 版本的 Django $ virtualenv --no-site-packages pyecharts-env $ source pyecharts-env/bin/activate $ pip install django==1.11.4 $ pip install pyecharts Step 1: 新建一个 django 项目 $ django-admin startproject myechartsite 创

python中django框架的csrf验证

在form表单以post的方式提交时,django默认会带一个验证的机制csrf验证 <form action="/day02/login/" method="post"> {% csrf_token %} 用户名: <input type="text" name="user"> 密码 <input type="text" name="pwd"> &l

python下django框架项目生成的文件解释

目录MyDjangoProject下表示工程的全局配置,分别为setttings.py.urls.py和wsgi.py,1.其中setttings.py包括了系统的数据库配置.应用配置和其他配置,2.urls.py则表示web工程Url映射的配置.3.子目录student则是在该工程下创建的app,包含了models.py.tests.py和views.py等文件4.templates目录则为模板文件的目录5.manage.py是Django提供的一个管理工具,可以同步数据库等等