基于Django+MySQL的B/S模式云端留言系统之登录页面
环境介绍(虚拟机):
win系统(数据存储) :
IP 192.168.5.157
MySQL
ubuntu(服务端s):
192.168.5.128
pycharm
物理机(客户端c):
浏览器
一、实现步骤
(一)数据库管理系统操作
- 在win中安装数据库管理系统MySQL,参考博文:MySQL数据库的安装步骤
- 开启MySQL远程链接的权限
- 在数据库管理系统MySQL中创建应用app数据存储目标数据库cucdate(数据库名)
1. 在win中安装数据库管理系统MySQL,参考博文[:MySQL数据库的安装步骤](https://blog.csdn.net/qq_28938301/article/details
下面重点介绍2 和3
2 开启MySQL远程链接的权限
MySQL数据库系统中的每个用户都有自己的用户名和密码,用于验证其身份并控制其访问权限。在MySQL中,用户信息存储在mysql.user
表中。
1)使用以下命令查看用户:
select * from mysql.user
或select user from mysql.user
图1
2)我们在项目实现中,可以使用root 从ubuntu 连接、迁移数据到MySQL数据库中,需要root’用户开启远程连接的权限。
查看当前root的登录权限,是否允许远程登录,如图所示host属性对应的值为:locahost–说明只能本地登录
图2 root用户信息
修改权限操作:
①:先进入mysql数据库(虽然提示已经是mysql>)但是一般情况可能需要use mysql;然后再输入:
Update user set host=’%’ where user=’root’; #修改user表中user属性列为root的行host的值为‘%’
`
②:执行命令:mysql>flush privileges; 授权提交
3 )在数据库管理系统MySQL中创建应用app数据存储目标数据库(数据库名)如下图中连接到stusys数据库,具体的数据库名可以根据自己创建而定
在项目根目录下的setting.py中设置连接数据库MySQL
在应用app目录下的models.py中创建数据模型(表格式)
备注,如果运行后出现以下图提示
需要以下操作步骤:
①
②③
在项目的__init__.py中设置 版本兼容
import pymysql
pymysql.version_info=(1,4,6,'final',0)
pymysql.install_as_MySQLdb()
完成以上数据库的环境部署
(二) 服务端Ubuntu服务端代码开发
1 .页面中表单元素设计(客户端页面与服务端的数据交互)
2 在urls.py中添加path
3 在views.py中书写视图函数 talk_login(进行业务处理–登录信息验证)
在验证环节需要读取表中的数据,为了保证顺利读取models .py中定义的数据表 有需要时可使用如下代码 import 导入
from .models import * # 把模型中的表导到当前views.py中
1) 在给客户端渲染的html页面中增加form标签,以及 {% csrf_token %}安全
页面可通过在容器div里增加form组件,实现时需要以下几个注意点:
① action属性为点击按钮后的URL,页面提交数据method=‘POST’(如本文代码 )
② form 中的输入框组件input要有name属性,其name属性将在视图函数中用来获取客户端在该input内的输入值(如本文 ,当views函数要获取数据时,代码如下图 )
实例:
<div class="centered"> <!--使用div定义一个中间容器 -->
<form action="/talk_find/login/" method="post">
{% csrf_token %}
<h1>欢迎进入留言系统</h1>
<fieldset>
<legend>
请输入登录信息:
</legend>
<table>
<tr>
<td>
用户名:
</td>
<td>
<input type="text" id="txtUserName" name="u" autofocus="true">
</td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text" id="txtPassword" name="p"></td>
</tr>
<tr>
<td colspan="3">
<input type="submit" value="提交">
<input type="reset" value="重置">
<input type="button" value="注册">
</tr>
</table>
</fieldset>
</form>
③设置urls.py的path路径(form中的URL路径与视图函数的映射)
4 数据库现有模型(表)迁移到MySQL数据库管理系统所在的系统
在项目中目录下终端执行:
python3 manage.py makemigrations app(应用名)
python3 manage.py migrate
二、服务启动与测试
(一) 使用指定ip地址和端口的方式启动
python3 manage.py runserver 192.168.5.128:8000
注意:使用的IP必须与settings.py中 第28行左右 ALLOWED_HOSTS 的设置一致,ALLOWED_HOSTS = [‘192.168.5.128’,]
(二)views.py中函数实现
1 简单的用户信息接收不为空判断:
函数只要是客户端浏览器有输入内容,对应的URL即可看到显示的页面内容hello(本文views.py函数功能中页面只用简单的‘’HELLO‘’)
python
def talk_login(request):
username=request.POST.get('u')
print(username)
userid=request.POST.get('p')
if userid and username:
return HttpResponse('HELLO')
else:
print('no')
2 连接MySQL进行用户名以及密码验证成功后跳转到留言提交页面
def talk_login_au(request):
username1 = request.POST.get('u')
userid1= request.POST.get('p')
get_date=userdate.objects.get(userid=userid1,username=username1) # 这里的userdate是在models.py中建立的数据模型(表的名字),userid,username是属于表的属性列部分
if get_date:
#return HttpResponse('HELLO')
return render(request,'submit_message.html')
else:
print('no')
以上代码中的submit_message.html是所要打开的页面文档可以自行定义,也可参考:基于Django+MySQL的B/S模式云端留言系统之留言提交与查看
三、总结与知识扩展
(一) 在 Django 和 MySQL 中设计登录界面,按照以下步骤进行:
-
安装 Django 和 MySQL 驱动:首先,确保已安装 Django 框架和适用于 MySQL 的数据库驱动程序
-
Django 项目和应用:使用 Django 的命令行工具创建一个新的 Django 项目,并在项目中创建一个应用(本文用前面博文中已经创建的项目)。
-
配置数据库连接:打开
settings.py
文件,配置 MySQL 数据库连接。
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘your_database_name’,
‘USER’: ‘your_username’,
‘PASSWORD’: ‘your_password’,
‘HOST’: ‘your_host’,
‘PORT’: ‘your_port’,
}
}
替换上述配置选项中的 your_database_name
、your_username
、your_password
、your_host
和 your_port
分别为你的 MySQL 数据库相关信息。
- 创建用户模型:在
models.py
文件中定义一个用户模型,用于存储用户的登录信息。
from django.db import models
from django.contrib.auth.models import AbstractUser
class userdate(AbstractUser):
# 添加自定义字段
#
pass
这里可以 Django 内置的 AbstractUser
类来扩展用户模型,当然还可以根据需要添加其他自定义字段(本博文是采用自定义)。
- 迁移数据库:运行以下命令来创建数据库表格。
$ python3 manage.py makemigrations my1 # my1是对应的应用app,也可以不带,默认迁移当前项目所有的APP
$ python3 manage.py migrate
这将根据定义的模型创建相应的数据库表。
完成以上步骤后可以在MySQL看到对应的表
- 创建登录视图和模板:在
views.py
文件中创建登录视图函数,用于处理用户登录逻辑。(需直接在views.py中调用客户端页面中 form中的input组件的name 属性值来获取用户的输入)
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def login_view(request):
if request.method == 'POST':
username = request.POST['username1']
password = request.POST['password1']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home') # 登录成功后跳转到URL(PATH 中属性为home的页
else:
error_message = 'Invalid username or password'
else:
error_message = ''
return render(request, 'login.html', {'error_message': error_message})
在上述代码中,使用 authenticate()
函数进行用户认证,如果认证成功,则使用 login()
函数登录用户,并重定向到主页。否则,显示错误消息并再次渲染登录模板。
- 创建登录模板:在应用的模板文件夹中创建一个名为
login.html
的模板,用于显示登录界面和处理表单提交。
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<label for="username">Username:</label>
<input type="text" id="username" name="username1">
<label for="password">Password:</label>
<input type="password" id="password" name="password1">
<button type="submit">Login</button>
</form>
<p>{{ error_message }}</p>
在上述模板中,使用 <form>
元素创建登录表单,表单的提交目标为登录视图的 URL。使用 {{ error_message }}
显示错误消息。
- 配置 URL 路由:在应用的
urls.py
文件中配置登录视图的 URL 路由。
from django.urls import path
from .views import login_view
urlpatterns = [
path('login/', login_view, name='login'),
]
这将将 /login
路径映射到登录视图函数。
- 运行服务器:运行以下命令启动 Django 开发服务器。
$ python3 manage.py runserver
现在,浏览器中访问 服务器查看登录界面,并使用用户模型进行登录。
上述代码只提供了基本的登录界面设计,其中涉及了用户模型、视图函数和模板的创建。
{% url 'login' %}
是 Django 模板语言(Django Template Language)中的一个模板标签。它用于生成 URL,该 URL 对应于在 URL 配置中定义的命名 URL 模式。
在 Django 中,URL 配置文件(通常是项目文件夹中的 urls.py
)定义了 URL 模式和视图函数之间的映射关系。URL 模式可以使用 name
参数进行命名。
{% url 'login' %}
中的 'login'
是一个参数,它指定了要生成 URL 的名称。它对应于 URL 配置文件中定义的具有相同名称的 URL 模式。
使用 {% url %}
模板标签,你可以避免在模板中硬编码 URL,而是通过 URL 的名称来生成 URL。这样,如果将来需要更改 URL 模式,只需更新 URL 配置文件,而不需要在模板中手动修改每个相关 URL。
例如,假设在你的应用的 URL 配置文件中有以下代码:
from django.urls import path
from .views import login_view
urlpatterns = [
path('login/', login_view, name='login'),
]
在模板中使用 {% url 'login' %}
将生成 /login/
的 URL。这样,如果将来需要更改登录页面的 URL,只需在 URL 配置文件中更新相应的 URL 模式即可,而不需要在模板中手动修改。
总结起来,{% url 'login' %}
用于在 Django 模板中生成与命名 URL 模式对应的 URL。