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

  1. django-admin.py startproject project-name

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

2) 新建一个APP:

  1. python manage.py startapp app-name

  1. django-admin.py startapp app-name

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

3) 启动服务器:

  1. python manage.py runserver 0.0.0.0:8000

  1. python manage.py runserver

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

5、视图与网址

views.py:

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

urls.py:

  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:

  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文件:

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

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

③ 修改views.py:

  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关键字来对多个变量做判断,或对变量取反。

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

或者:

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

② for 标签

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

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

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

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

③ ifequal/ifnotequal 标签

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

  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 %} 标签允许在模板中包含其它的模板的内容。

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

7、Django模型

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

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

1) 数据库配置

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

  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 文件:

  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):

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

3) 数据库操作

添加database.py文件:

  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:

  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。

① 添加数据

  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>")

② 获取数据

  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>")

③ 更新数据

  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()方法即可:

  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 文件,用于接收用户的请求:

  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 表单:

  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:

  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 表单:

  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 请求:

  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:

  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。

Python之Django框架的更多相关文章

  1. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

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

    Python的Django框架中的Cookie相关处理 浏览器的开发人员在非常早的时候就已经意识到. HTTP's 的无状态会对Web开发人员带来非常大的问题,于是(cookies)应运而生. coo ...

  3. Python的Django框架中的Context使用

    Python的Django框架中的Context使用 近期整理些Python方面的知识,一旦你创建一个 Template 对象,你能够用 context 来传递数据给它. 一个context是一系列变 ...

  4. 如何使用Python的Django框架创建自己的网站

    如何使用Python的Django框架创建自己的网站 Django建站主要分四步:1.创建Django项目,2.将网页模板移植到Django项目中,3.数据交互,4.数据库 1创建Django项目 本 ...

  5. 将Python的Django框架与认证系统整合的方法

    将Python的Django框架与认证系统整合的方法 这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下 将Django ...

  6. Python的Django框架中的URL配置与松耦合

    Python的Django框架中的URL配置与松耦合 用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件. 但如果要处理一个很大的文本,比 ...

  7. Django框架学习——python模拟Django框架(转载)

    原贴来源 http://wiki.woodpecker.org.cn/moin/ObpLovelyPython/AbtWebModules python实现web服务器 web开发首先要有web服务器 ...

  8. python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)

    12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...

  9. python 之 Django框架(服务器程序和应用程序、基础必备三件套及相关配置)

    第十二章 Django框架 12.1 服务器程序和应用程序 服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理.应用程序则负责具体的逻辑处理.为了方便应用程序的开发, ...

  10. python使用Django框架开发简单项目

    一. (1)使用idea生成一个python项目,安装Django框架: pip install django==1.8.2 (2)初始化项目: django-admin startproject x ...

随机推荐

  1. mysql查询哪个表数据量最大

    use information_schema;select table_name,table_rows from tables where table_schema='cargo_new' order ...

  2. Linux-准备工作

    首先安装一个box,安装一个centos7,然后就是xshell,接下来就是 查看ip ifconfig ip addr vi /etc/sysconfig/network-scripts/ifcfg ...

  3. HTML5/CSS3 第二章页面组件

    页面组件 1 元素的尺寸/边框/背景 1.1 css尺寸相关属性 height 高度 min-height 最小高度 max-height 最大高度 width 宽度 min-width 最小宽度 m ...

  4. 使用natapp本地映射外网服务

    官网:https://natapp.cn/ 软件很好用,这对于前端工程师来说,有了这个工具就很爽了,当你的领导或者不在你公司内网范围内的人,想要看你的页面效果,就很简单了. 详细的不用更多介绍,直接去 ...

  5. 模拟:HDU1034-Candy Sharing Game

    解题心得: 1.直接模拟每一次分一半就行了,模拟过程,记录轮数,但是也看到有些大神使用的是链表,估计链表才是真的做法吧. 题目: Candy Sharing Game Time Limit: 2000 ...

  6. P3116 [USACO15JAN]会议时间Meeting Time

    P3116 [USACO15JAN]会议时间Meeting Time 题目描述 Bessie and her sister Elsie want to travel from the barn to ...

  7. Linear Regression 线性回归

    Motivation 问题描述 收集到某一地区的房子面积和房价的数据(x, y)42组,对于一套已知面积的房子预测其房价?   由房价数据可视化图可以看出,可以使用一条直线拟合房价.通过这种假设得 ...

  8. loj2045 「CQOI2016」密钥破解

    CQOI 板子大赛之 pollard rho #include <iostream> #include <cstdio> using namespace std; typede ...

  9. PostgreSQL 数组类型

    PostgreSQL 支持表的字段使用定长或可变长度的一维或多维数组,数组的类型可以是任何数据库内建的类型.用户自定义的类型.枚举类型, 以及组合类型.但目前还不支持 domain 类型. 数组类型的 ...

  10. LeetCode——Problem2:Add Two Numbers

    这又过了一周了,总感觉刷这个好花时间呀.每次都一两个小时.让我不好安排时间.应该是我太菜了.对,没错,就是这样 1.题目 You are given two non-empty linked list ...