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
測試結果將會顯示在控制台中。
原創文章,作者:AXDHO,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372176.html