前言
上一篇文章中记录了Django的安装与简单使用,接下来就做一个可能对于我们初学者来说都愿意做的一件事情——实现一个登陆的功能。
一、项目与app创建
首先我们按照上一篇文章的教程来创建出project和app:
这里我们要提一下templates这个文件夹:templates文件夹是用来存放我们的HTML文档的。如果我们要做一个登陆界面,我们首先需要有一个登陆界面的html,然后再有一个home界面,如果用户名和密码验证成功了,则让页面跳转到我们的home页面。
创建好project,我们运行一下看看是否创建完成:
二、HTML文件创建
上一节我们提到html写下templates文件夹下,那么django是如何找到我们的HTML的呢?
打开mysite_login文件夹下的setting是文件,找到TEMPLATES:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(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',
],
},
},
]
我们可以看到: ‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)],列表里的第二个参数就是我们的templates文件夹。
我们创建两个HTML文档:login.html、home.html.
login.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
<link rel="stylesheet" href="/static/commons.css">
<style>
label{
width: 80px ;
text-align: right;
display: inline-block;
}
</style>
</head>
<body>
<form action="/login/" method="post">
<p>
<label for="username">用户名:</label>
<input id="username" name="user" type="text">
</p>
<p>
<label for="password">密码:</label>
<input id="password" name="pwd" type="password">
<input type="submit" value="提交">
<span style="color: red;">{{ error_msg }}</span>
</p>
</form>
</body>
</html>
home.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>后台管理</title>
<link rel="stylesheet" href="/static/commons.css">
</head>
<body style="margin: 0">
<div style="height: 48px;background-color: #dddddd"></div>
<div>
<h1 class="c1">欢迎来到我的第一个Django网站!</h1>
</div>
<div style="height: 48px;background-color: #dddddd"></div>
</body>
</html>
注:我们这里用到了CSS,对于我们一般web开发都会用到CSS和JS,那么CSS和JS在django中如何使用呢?
对于静态文件(CSS、JS),我们需要额外创建一个文件夹:static,将CSS和JS文件都写到这个文件夹中,然后去settings.py中配置静态文件,在settings.py的最后加上:
# 配置静态文件
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
这样的话我们的静态文件就能使用了。
我们写一个简单的CSS文件:commons.css:
body{
background-color: #eeeeee;
}
.c1{
background-color: red;
text-align: center;
}
三、逻辑业务编写
接下来我们就来写我们的views.py,也就是我们的业务逻辑:
from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.shortcuts import redirect
# Create your views here.
def login(request):
# 包含用户提交的所有信息
# 获取用户提交方法
error_msg = ""
if request.method == "POST":
# 获取用户通过POST提交过来的数据
user = request.POST.get('user',None)
pwd = request.POST.get('pwd',None)
if user == 'root' and pwd == '123':
# 如果用户名和密码正确,就跳转
return redirect('/home/') # 跳转到home界面,redirect用于跳转
else:
# 用户名和密码不匹配
error_msg = "用户名或密码错误"
return render(request,'login.html',{'error_msg':error_msg}) # render用于获取我们的html页面
# render中第三个参数的意思:第三个参数是一个字典,作用是我们的django找到这个login.html页面,然后将
# 里面的特殊字符error_msg替换成123
def home(request):
return render(request,'home.html')
代码解释:
user = request.POST.get('user',None)
pwd = request.POST.get('pwd',None)
这两句是根据html中form表单的name属性来获取用户提交的用户名和密码。
if request.method == "POST":
# 获取用户通过POST提交过来的数据
user = request.POST.get('user',None)
pwd = request.POST.get('pwd',None)
if user == 'root' and pwd == '123':
# 如果用户名和密码正确,就跳转
return redirect('/home/') # 跳转到home界面,redirect用于跳转
else:
# 用户名和密码不匹配
error_msg = "用户名或密码错误"
这个if语句是用来获取用户提交的数据并进行判断。
return redirect('/home/') # 跳转到home界面,redirect用于跳转
这里是用于跳转到我们的home界面,redirect用于跳转。这里的参数写的是路由,也就是在urls.py中配置的URL。
def home(request):
return render(request,'home.html')
这里是用于返回home界面,render是当然函数返回的界面。
然后配置路由urls.py:
"""mysite URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from login import views
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', views.login),
path('home/', views.home),
]
四、运行
似乎一切准备就绪了,我们来运行一下:
我们直接点一下提交,看看会发生什么:
糟糕,出错了,怎么办!!!
不要慌,我们来看看是什么错误:
这个错误的解决方法:到settings.py中找到有关CSRF的配置,然后将它注释掉:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
再次运行:
输入用户名和密码,点击提交:
##### 大功告成!!####
写在最后
本文是个人的一些学习笔记,如有侵权,请及时联系我进行删除,谢谢大家.