本文最后更新于 275 天前,其中的信息可能已经有所发展或是发生改变。
一、Django概述与安装
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。
Django 框架的核心组件有:
- 用于创建模型的对象关系映射;
- 为最终用户设计较好的管理界面;
- URL 设计;
- 设计者友好的模板语言;
- 缓存系统。
Django已经成为web开发者的首选框架,是一个遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。
MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图 。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:
层次 | 职责 |
---|---|
模型(Model),即数据存取层 | 处理与数据相关的所有事务:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 |
模板(Template),即表现层 | 处理与表现相关的决定:如何在页面或其他类型文档中进行显示。 |
视图(View),即业务逻辑层 | 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。 |
安装Django
pip install django -i https://mirrors.aliyun.com/pypi/simple/
二、创建项目
1.1建立项目
cd ..
mkdir django cd django
# 创建项目
django-admin startproject myFirstDjango
1.2默认文件介绍
mysite
- manage.py [项目的管理、启动 ]
- mysite
- __init__.py
- settings.py [项目配置]
- urls.py [页面代码和网址的对应关系][常用]
- wsgi.py [接收网络请求][不要动][同步]
- asgi.py [接收网络请求][不要动][异步]
三、创建登录应用
python manage.py startapp stu
- migrations [使用较少] 数据库变更记录
-__init__.py
- __init__.py
- admin.py [django后台提供admin功能]
- apps.py [使用较少] app启动类
- models.py [重要,对数据库进行操作][M]
- tests.py [测试使用]
- views.py [重要,定义函数][V]
- templates [模版文件] [T]
此时就可以在命令行中输入如下命令行来初步运行项目
python manage.py runserver
打开浏览器输入127.0.0.1:8000
# 执行结果
System check identified no issues (0 silenced).
April 16, 2023 - 09:28:42
Django version 3.2.18, using settings 'myFirstDjango.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
2.编写登录页面
2.1新建项目stu
python manage.py startapp stu
2.2在urls.py中添加如下内容
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('student/', include('stu.urls'))
]
2.3修改settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'stu'
]
2.4修改stu/urls.py
#coding=utf-8
from django.urls import path
from . import views
urlpatterns = [
path('', views.login_view)
]
2.5修改stu/views.py
from django.shortcuts import render
# Create your views here.h
def login_view(request):
return render(request, 'login.html')
2.6新建templates文件夹,编写login.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="get">
<p>
<label>用户名:</label><input type="text" name="uname"/>
</p>
<p>
<label>密 码:</label><input type="pwd" name="pwd"/>
</p>
<p>
    <input type="submit" name="提交"/>
</p>
</form>
</body>
</html>
在settings.py中,补充前端文件路径
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['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',
],
},
},
]
2.7打开pycharm终端,输入命令
python manage.py runserver
# 成功结果
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations
for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
April 13, 2023 - 11:02:50
Django version 3.2.18, using settings 'myFirstDjango.settings'
Starting development server at http://127.0.0.1:8000/
四、实现登录验证
1.GET方法
1.修改login.html中表单form的action
<body>
<form action="/student/login/" method="get">
2.修改stu/urls.py路由
#coding=utf-8
from django.urls import path
from . import views
urlpatterns = [
path('', views.index_view),
path('login/', views.login_view)
]
3.修改views.py文件,添加判断
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
#渲染登录首页
def index_view(request):
return render(request, 'login.html')
#处理登录功能
def login_view(request):
#接收请求参数
uname = request.GET.get('uname', '')
pwd = request.GET.get('pwd', '')
if uname == 'zhangsan' and pwd == '123':
return HttpResponse('登录成功')
return HttpResponse('登录失败')
2、POST方法
1.修改login.html中的方法为post
并添加{% csrf_token %}作为中间件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/student/login/" method="post">
{% csrf_token %}
<p>
<label>用户名:</label><input type="text" name="uname"/>
</p>
<p>
<label>密 码:</label><input type="pwd" name="pwd"/>
</p>
<p>
    <input type="submit" value="登录"/>
</p>
</form>
</body>
</html>
2.修改views.py
#处理登录功能
def login_view(request):
#接收请求参数
uname = request.POST.get('uname', '')
pwd = request.POST.get('pwd', '')
if uname == 'zhangsan' and pwd == '123':
return HttpResponse('登录成功')
return HttpResponse('登录失败')
五、实现注册功能
1、修改stu/urls.py
#coding=utf-8
from django.urls import path
from . import views
urlpatterns = [
# path('', views.login_view),
path('register', views.index_view),
path('login',views.login_view)
]
2、修改views.py
from django.http import HttpResponse
from django.shortcuts import render
from .models import *
# Create your views here.
def login_view(request):
return render(request, 'login.html')
def index_view(request):
m = request.method
if m == 'GET':
return render(request, 'register.html')
else:
# 获取请求参数
uname = request.POST.get('uname', '')
pwd = request.POST.get('pwd', '')
print(uname)
print(pwd)
# 判断
if uname and pwd:
# 创建模型对象
stu = Student(sname=uname, spwd=pwd)
# 插入数据库
stu.save()
return HttpResponse('注册成功')
else:
return HttpResponse('注册失败')
3、新建register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/student/register/" method="post">
{% csrf_token %}
<p>
<label for="ua">用户名</label><input type="text" name="uname" id="ua"/>
</p>
<p>
<label for="pd">密 码</label><input type="password" name="pwd" id="pd"/ >
</p>
<p>
<input type="submit" value="注册">
</form>
</body>
</html>
4.编辑models.py,定义字段的约束
必须引用.Model类
from django.db import models
# Create your models here.
class Student(models.Model):
sname = models.CharField(max_length=30, unique=True)
spwd = models.CharField(max_length=30)
# class Meta:
# db_table='t_stu'
5.db.splite3连接splite3数据库
6.建立迁移文件
python manage.py migrate
python manage.py makemigrations stu
python manage.py migrate
7.测试是否成功,查看数据库是否新增了信息
六、将后端的结果再传给前端
修改路由,添加test:
#coding=utf-8
from django.urls import path
from . import views
urlpatterns = [
path('register/', views.index_view),
path('login/',views.login_view),
path('test/',views.test_view)
]
后端代码,修改stu/views.py
def test_view(request):
m = request.method
if m == 'GET':
return render(request, 'test.html')
else:
uname = request.POST.get('uname','')
truedata = []
all_student = Student.objects.filter(sname=uname)
print(all_student)
for i in all_student:
result = {
'name':i.sname,
'pwd':i.spwd
}
truedata.append(result)
print(truedata)
truedata = {
'info':truedata[0]
}
return render(request, 'test.html', {'fontdata': truedata})
前端代码,新建test.html
<!DOCTYPE html>
<html>
<head>
<title>My Template</title>
</head>
<body>
<form action="/student/test/" method="post">
{% csrf_token %}
<p>
<label for="ua">请输入你希望查询的学生姓名: </label><input type="text" name="uname" id="ua"/>
</p>
<p>
<input type="submit" value="查询">
</form>
<h1>Welcome, {{ fontdata.info.name }}!</h1>
<p>密码: {{ fontdata.info.pwd }}</p>
</body>
</html>
查询结果: