Django框架简介
Django是一个高级Python Web框架,鼓励快速开发和简洁实用的设计。它遵循“约定优于配置”的原则,内置了许多功能,使开发者能够专注于业务逻辑而非底层实现。
核心特点
全栈框架
Django提供从数据库ORM到模板渲染的一站式解决方案,内置用户认证、管理员界面等功能,减少第三方依赖。
DRY原则
严格遵循Don't Repeat Yourself(不要重复自己)原则,通过抽象和模块化减少冗余代码。
MTV架构模式
Django采用Model-Template-View架构:
- Model:处理数据层,通过ORM与数据库交互
- Template:负责前端展示
- View:处理业务逻辑,连接Model和Template
主要组件
ORM(对象关系映射)
允许用Python类定义数据库模型,自动生成SQL语句,支持多种数据库后端(PostgreSQL、MySQL等)。
路由系统
通过URLconf模块将URL模式映射到视图函数,支持正则表达式和路径转换器。
模板引擎
使用Django Template Language(DTL)分离逻辑和展示,支持模板继承和过滤器。
内置Admin
自动生成管理后台,支持数据CRUD操作,可通过简单配置自定义界面。
适用场景
内容管理系统
内置组件适合快速构建博客、新闻站点等CMS系统。
数据驱动应用
强大的ORM和Admin界面简化了复杂数据管理。
RESTful API
结合Django REST framework可快速构建API服务。
简单示例
定义模型:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField('date published')
创建视图:
from django.shortcuts import render
from .models import Article
def article_list(request):
articles = Article.objects.all()
return render(request, 'blog/list.html', {'articles': articles})
配置URL:
from django.urls import path
from . import views
urlpatterns = [
path('articles/', views.article_list),
]
性能优化
缓存系统
支持多级缓存(内存、文件、数据库、Redis等),提供模板片段缓存和视图缓存装饰器。
安全特性
内置CSRF保护、SQL注入防护、XSS防御等安全机制,自动处理常见漏洞。
Django的丰富文档和活跃社区使其成为企业级应用开发的高效选择,适合需要快速迭代的中大型项目。
用户登录功能,前后端交互事例
View:
from django.http import JsonResponse
from django.contrib.auth import authenticate, login
def silogin(request):
data=request.GET
username=data.get("username")
password=data.get("password")
user =authenticate(username=username,password=password)
if not user: #用户不存在
return JsonResponse({
"result" : "用户名或密码不正确",
})
login(request,user)
return JsonResponse({
"result" : "success",
})
URL:
from django.urls import path
from game.views.settings.getinfo import getinfo
from game.views.settings.login import silogin
#例子
#表示当用户访问 http://你的域名/getinfo/ 这个路径时,Django 会调用 getinfo 这个视图函数来处理请求。
urlpatterns=[
path("getinfo/", getinfo, name="settings_getinfo"),
path("login/",silogin,name="settings_login"),
]
前端:
add_listening_events_login(){ //监听login下的注册按键
let outer=this;
this.$login_register.click(function(){
outer.register();
});
this.$login_submit.click(function(){
outer.login_on_remote();
});
}
login_on_remote(){ //在远程服务器上登录
let outer=this;
let username=this.$login_username.val();
let password=this.$login_password.val();
this.$login_error_message.empty();
$.ajax({
url: "https://域名/settings/login",
type: "GET",
data:{
username:username,
password:password,
},
success: function(resp){
console.log(resp);
if(resp.result === "success")
{
location.reload(); //进行刷新,以便调用登录逻辑
}else{
outer.$login_error_message.html(resp.result);
}
}
});
}