Django是一个高级的Python Web框架,采用了MTV的设计模式。MTV表示Model-Template-View,是Django框架中的三个核心部分。
一、Django入门
1、安装Django
使用pip安装最新版的Django:
pip install django
2、创建Django项目
使用以下命令创建一个新的Django项目:
django-admin startproject myproject
这将创建一个名为myproject的目录,其中包含Django的常规文件结构。
3、运行Django项目
进入myproject目录,运行以下命令启动服务器:
cd myproject
python manage.py runserver
浏览器访问http://127.0.0.1:8000/即可看到Django的欢迎页面。
二、Django模型
1、定义模型
在Django中定义模型,需要在应用程序的models.py文件中创建一个类,该类继承自django.db.models.Model。
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
2、同步数据库
运行以下命令同步数据库:
python manage.py makemigrations
python manage.py migrate
3、使用模型
可以通过以下方式使用模型:
from myapp.models import Book
book = Book(title='Django入门教程', author='张三', pub_date=datetime.now())
book.save()
三、Django视图
1、定义视图
Django视图是一个Python函数,它负责处理Web请求并返回响应。以下是定义视图的示例:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello Django!")
2、配置URL
在Django中,每个URL必须映射到一个视图函数。可以通过创建app的urls.py文件并在主urls.py文件中引入来定义URL。
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^hello/$', views.hello, name='hello'),
]
3、访问视图
在浏览器中访问定义的URL即可调用视图函数并返回响应结果。
四、Django模板
1、创建模板
Django模板通常采用HTML和CSS来创建,可以放在应用的templates目录中。以下是一个简单的HTML模板示例:
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ content }}</p>
</body>
</html>
2、使用模板
在视图函数中,可以通过以下方式使用模板:
from django.shortcuts import render
def my_view(request):
context = {'title': '我的视图', 'content': '欢迎来到我的世界!'}
return render(request, 'my_template.html', context)
3、渲染模板
在模板渲染时,指定上下文。以下是在模板中渲染上下文的示例:
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<p>{{ content }}</p>
<p>{{ some_variable }}</p>
</body>
</html>
在视图函数中,传递上下文:
from django.shortcuts import render
def my_view(request):
context = {'title': '我的视图', 'content': '欢迎来到我的世界!', 'some_variable':1+2}
return render(request, 'my_template.html', context)
五、Django表单
1、创建表单模型
在forms.py文件中,创建一个表单模型并继承自django.forms.Form。以下是创建表单模型的示例:
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField(widget=forms.Textarea)
sender = forms.EmailField()
cc_myself = forms.BooleanField(required=False)
2、表单视图
在views.py文件中,创建一个表单视图,并加载对应的表单模板。以下是创建表单视图的示例:
from django.shortcuts import render
from myapp.forms import ContactForm
def contact(request):
form = ContactForm()
return render(request, 'contact.html', {'form': form})
3、表单模板
在表单模板中,使用Django模板标签和变量来渲染表单。以下是表单模板的示例:
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
4、处理表单数据
在表单视图中,处理提交的表单数据。以下是处理表单数据的示例:
from django.core.mail import send_mail
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
send_mail(
cd['subject'],
cd['message'],
cd.get('sender', 'noreply@example.com'),
['noreply@example.com'],
reply_to=[cd.get('sender', 'noreply@example.com')],
)
return HttpResponseRedirect('/thanks/')
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})
六、Django认证系统
1、用户注册
在Django中,用户注册可以通过使用内置的User模型和自定义的表单实现。以下是用户注册的示例:
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
else:
form = UserCreationForm()
return render(request, 'register.html', {'form': form})
2、用户登录
使用Django内置的LoginView类来处理用户登录。以下是处理用户登录的示例:
from django.contrib.auth.views import LoginView
class MyLoginView(LoginView):
template_name = 'login.html'
def form_valid(self, form):
remember_me = form.cleaned_data.get('remember_me', False)
if not remember_me:
self.request.session.set_expiry(0)
return super().form_valid(form)
3、用户授权
在Django中,用户授权可以使用装饰器实现。以下是用户授权的示例:
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
# 用户已授权,执行处理
七、Django分页
1、创建查询集
在视图函数中,多个对象可组合成查询集。以下是创建查询集的示例:
from myapp.models import Book
def book_list(request):
book_list = Book.objects.all()
paginator = Paginator(book_list, 10) # 每页显示10条数据
page = request.GET.get('page')
books = paginator.get_page(page)
return render(request, 'book_list.html', {'books': books})
2、分页模板
在分页模板中,使用Django模板标签和变量来渲染分页内容。以下是分页模板的示例:
<div class="pagination">
{% if page.has_previous %}
<a href="?page=1"><< first</a>
<a href="?page={{ page.previous_page_number }}">< previous</a>
{% endif %}
<span class="current-page">
Page {{ page.number }} of {{ page.paginator.num_pages }}.
</span>
{% if page.has_next %}
<a href="?page={{ page.next_page_number }}">> next</a>
<a href="?page={{ page.paginator.num_pages }}">>> last</a>
{% endif %}
</div>
八、Django缓存
1、缓存页面
在视图函数中,使用cache_page进行缓存页面。以下是缓存页面的示例:
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
return HttpResponse("Hello, Django!")
2、缓存数据
在视图函数中,使用cache.set和cache.get函数进行缓存数据。以下是缓存数据的示例:
from django.core.cache import cache
def my_view(request):
data = cache.get('my_data')
if not data:
data = expensive_calculation()
cache.set('my_data', data, 60 * 15) # 缓存15分钟
return HttpResponse(data)
九、Django测试
1、创建测试用例
在Django中,测试用例通常位于应用程序的tests.py文件中。以下是创建测试用例的示例:
from django.test import TestCase
from django.urls import reverse
class MyTests(TestCase):
def test_home_page(self):
response = self.client.get(reverse('home'))
self.assertEqual(response.status_code, 200)
2、运行测试用例
在命令行中,使用以下命令运行测试用例:
python manage.py test
测试结果将会显示在控制台中。