一、Django 安装
1、查看最新的正式版本 https://www.djangoproject.com/download/ 2、pip install Django==2.1.7
二、创建项目
1、使用 django-admin.py(在python安装目录Scripts下)创建项目:
E:\code\python\django>d:\Python\Scripts\django-admin.py startproject HelloWorld
2、目录说明
HelloWorld: 项目的容器。
manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
HelloWorld/settings.py: 该 Django 项目的设置/配置。
HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
3、启动服务器:
python manage.py runserver 0.0.0.0:8000
在浏览器输入服务器的ip及端口号,如果正常启动,输出结果如下:
三、视图和 URL 配置
1、新建HelloWorld/HelloWorld/view.py
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world ! ")
2、修改HelloWorld/HelloWorld/urls.py,绑定 URL 与视图函数。
from django.conf.urls import url
from . import view
urlpatterns = [
url(r'^$', view.hello),
# url(r'^hello$', view.hello),
]
保存并刷新页面,可以看到页面已经修改
可将 url(r'^$', view.hello)
修改为url(r'^hello$', view.hello)
四、模板使用
1、创建HelloWorld/templates/hello.html
<h1>{{ hello }}</h1>
2、修改HelloWorld/HelloWorld/settings.py TEMPLATES 中的 DIRS 为 [BASE_DIR+"/templates",],
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR+"/templates", ], # 修改此处
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
3、修改 HelloWorld/HelloWorld/view.py,增加一个新的对象,用于向模板提交数据:
# -*- coding: utf-8 -*-
from django.shortcuts import render
def hello(request):
context = {}
context['hello'] = 'Hello World!'
return render(request, 'hello.html', context)
再次访问 http://127.0.0.1:8000/hello 可以看到
五、Django模板标签
1、注释标签
{# 这是一个注释 #}
2、if/else 标签
{% if athlete_list and coach_list %}
athletes 和 coaches 变量都是可用的。
{% elif condition2 %}
... display 1
{% else %}
... display 2
{% endif %}
3、for 标签
{% for athlete in athlete_list reversed %} # reversed 使得该列表被反向迭代
<h1>{{ athlete.name }}</h1>
<ul>
{% for sport in athlete.sports_played %}
<li>{{ sport }}</li>
{% endfor %}
</ul>
{% endfor %}
4、ifequal/ifnotequal 标签
{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% else %}
<h1>No Welcome!</h1>
{% endifequal %}
5、过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,
一个过滤器管道的输出可以作为下一个管道的输入:
{{ name|lower }} # 将name转换为小写
{{ my_list|first|upper }} # 将第一个元素转化为大写
{{ name|truncatewords:"5" }} # 显示变量 name 的前5个词
6、include 标签
{% include %} 标签允许在模板中包含其它的模板的内容。
{% include "hello.html" %}
7、模板继承
(1)创建HelloWorld/templates/base.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Djano教程(runoob.com)</title>
</head>
<body>
<p> Django 测试。</p>
{% block mainbody %}
<p>原始内容</p>
{% endblock %}
</body>
</html>
(2)修改HelloWorld/templates/hello.html,继承base.html
{%extends "base.html" %}
<h1>{{ hello }}</h1>
{% block mainbody %}
<p>继承了 base.html 文件</p>
{% endblock %}
六、Django模型(数据库)
1、安装mysql 驱动
pip install mysqlclient
2、修改HelloWorld/HelloWorld/settings.py,文件头部添加 # -- coding: UTF-8 --
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django
'NAME': 'test',
'USER': 'test',
'PASSWORD': 'test123',
'HOST':'localhost',
'PORT':'3306',
}
}
3、定义模型(创建 APP)
Django规定,如果要使用模型,必须要创建一个app。使用以下命令创建一个 TestModel 的 app。
E:\code\python\django\HelloWorld>d:\Python\Scripts\django-admin.py startapp TestModel
4、修改HelloWorld/TestModel/models.py
from django.db import models
class Test(models.Model): # 类名代表了数据库表名,且继承了models.Model
name = models.CharField(max_length=20) # 类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。
5、修改HelloWorld/HelloWorld/settings.py ,添加TestModel
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', # 添加此项
]
6、创建表结构
python manage.py migrate # 创建表结构
python manage.py makemigrations TestModel # 让 Django 知道模型有一些变更
python manage.py migrate TestModel # test数据库会出现表TestModel_test
7、创建HelloWorld/HelloWorld/testdb.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作:添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT:
def testdb(request):
test1 = Test(name='django') #
test1.save()
return HttpResponse("<p>数据添加成功!</p>")
8、修改HelloWorld/HelloWorld/urls.py
from django.conf.urls import *
from . import view, testdb
urlpatterns = [
url(r'^hello$', view.hello),
url(r'^testdb$', testdb.testdb),
]
访问 http://127.0.0.1:8000/testdb 就可以看到数据添加成功的提示:
9、数据库增删改查
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
test1 = Test(name='django') # 相当于SQL中的INSERT
test1.save()
response = "" # 初始化
list = Test.objects.all() # 相当于SQL中的SELECT * FROM
# response2 = Test.objects.filter(id=1) # filter相当于SQL中的WHERE
# response3 = Test.objects.get(id=1) # 获取单个对象
Test.objects.order_by('name')[0:2] # 限制返回的数据,相当于 SQL 中的 OFFSET 0 LIMIT 2
Test.objects.order_by("id") # 数据排序
Test.objects.filter(name="django").order_by("id") # 可以连锁使用
Test.objects.filter(id=1).update(name='Google') # 修改数据可以使用 save() 或 update()
Test.objects.filter(id=1).delete() # 删除数据库中的对象只需调用该对象的delete()方法
# 输出所有数据
for var in list:
response += var.name + " "
return HttpResponse("<p>" + response + "</p>")
七、Django 表单
1、GET 请求
创建 /HelloWorld/HelloWorld/search.py
# -*- coding: utf-8 -*-
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'
content = request.GET['q']
if content != '':
message = '你搜索的内容为: ' + content
else:
message = '你提交了空表单'
return HttpResponse(message)
创建 /HelloWorld/templates/search_form.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Django教程</title>
</head>
<body>
<form action="/search" method="get"> # action后"/search"的意思是跳转到/search页面
<input type="text" name="q">
<input type="submit" value="搜索">
</form>
</body>
</html>
修改/HelloWorld/HelloWorld/urls.py
from django.conf.urls import url
from . import view,testdb,search
urlpatterns = [
url(r'^hello$', view.hello),
url(r'^testdb$', testdb.testdb),
url(r'^search-form$', search.search_form),
url(r'^search$', search.search),
]
python manage.py runserver 0.0.0.0:8000 访问 http://127.0.0.1:8000/search-form 2、POST 请求
创建/HelloWorld/templates/post.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Django教程</title>
</head>
<body>
<form action="/search-post" method="post">
{% csrf_token %} {#Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签#}
<input type="text" name="q">
<input type="submit" value="Submit">
</form>
<p>{{ rlt }}</p> {#为表格处理结果预留位置#}
</body>
</html>
创建/HelloWorld/HelloWorld/search1.py
# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.views.decorators import csrf
# 接收POST请求数据
def search_post(request):
ctx ={}
if request.POST:
ctx['rlt'] = request.POST['q']
return render(request, "post.html", ctx)
修改/HelloWorld/HelloWorld/urls.py
from django.conf.urls import url
from . import view,testdb,search,search2
urlpatterns = [
url(r'^hello$', view.hello),
url(r'^testdb$', testdb.testdb),
url(r'^search-form$', search.search_form),
url(r'^search$', search.search),
url(r'^search-post$', search1.search_post),
]
查看结果 http://127.0.0.1:8000/search-post 八、python管理工具
1、登陆
修改/HelloWorld/HelloWorld/urls.py
from django.conf.urls import url
from django.contrib import admin
from . import view, testdb, search, search1
urlpatterns = [
url(r'^hello$', view.hello),
url(r'^testdb$', testdb.testdb),
url(r'^search-form$', search.search_form),
url(r'^search$', search.search),
url(r'^search-post$', search1.search_post),
url(r'^admin/', admin.site.urls),
]
创建超级用户: python manage.py createsuperuser
登陆 http://127.0.0.1:8000/admin/ 修改HelloWorld/TestModel/admin.py
from django.contrib import admin
from TestModel.models import Test
# Register your models here.
admin.site.register(Test)
刷新后即可看到 Testmodel 数据表
2、更复杂的数据模型:
修改 HelloWorld/TestModel/models.py
from django.db import models
# Create your models here.
class Test(models.Model):
name = models.CharField(max_length=20)
class Contact(models.Model):
name = models.CharField(max_length=200)
age = models.IntegerField(default=0)
email = models.EmailField()
def __unicode__(self):
return self.name
class Tag(models.Model):
contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
修改 HelloWorld/TestModel/admin.py
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
# Register your models here.
admin.site.register([Test, Contact, Tag])
创建表结构
python manage.py makemigrations TestModel # 让 Django 知道模型有一些变更
python manage.py migrate TestModel # 创建表结构
刷新页面可见:
3、自定义表单
例如添加Contacts,原始页面:
修改HelloWorld/TestModel/admin.py
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
# Register your models here.
class TagInline(admin.TabularInline):
model = Tag
class ContactAdmin(admin.ModelAdmin):
list_display = ('name','age', 'email') # list
search_fields = ('name',)
inlines = [TagInline] # Inline
fieldsets = (
['Main',{
'fields':('name','email'),
}],
['Advance',{
'classes': ('collapse',),
'fields': ('age',),
}]
)
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test])
修改后