django-自定义用户登录(个人笔记)
django自定义用户登录(个人笔记)
函数说明
1. render()函数:对用户请求做出响应
2. path()函数:定义路由
3. create()函数:增加数据表记录
配置settings.py
注册app
确定创建的app在INSTALLED_APPS中注册app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'loginapp.apps.LoginappConfig',
]
连接数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #数据库类型
'NAME': 'logindb', #数据库名称
'USER': 'root', #数据库用户
'PASSWORD': 'yourpassword', #数据库密码
'HOST': '127.0.0.1', #本地服务器地址
'PORT': '3306', #服务端口
}
}
配置自定义模板
不使用django提供的内置的templates,在项目目录下创建html目录放置自定义的html文件
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'html']
,
'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',
],
},
},
]
配置语言和时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
配置静态文件目录
在项目目录下创建static目录存放js、css等静态文件
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
配置根路由
在项目目录下的urls.py中进行如下配置
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', include('loginapp.urls'), name='login')
]
配置应用路由
在应用目录下新建urls.py文件进行以下编写
from django.urls import path
from loginapp import views
urlpatterns = [
path('register/', views.register, name='register'),
path('login/', views.login, name='login'),
path('index/', views.index, name='index'),
path('logout/', views.logout, name='logout')
]
创建用户模型
from django.db import models
# Create your models here.
class User(models.Model):
username = models.CharField("用户名", max_length=30, unique=True)
password = models.CharField("密码", max_length=128)
def __str__(self):
return "用户名" + self.username
用户模型创建成功后使用以下命令进行数据表的生成和迁移
python manage.py makemigrations #生成数据表
python manage.py migrate (最好后面还加应用名称,以免生成django自带的大量的数据表)#迁移数据表到数据库中
配置用户注册
#接受用户请求
def register(request):
#请求传输方式判断
if request.method == 'GET':
return render(request, '../html/register.html')
elif request.method == 'POST':
#接收用户填写的信息
username = request.POST.get('username', '')
password = request.POST.get('password', '')
password1 = request.POST.get('password1', '')
# 验证数据
if len(username) < 4:
username_error = '用户名太短' # 用户提示信息
return render(request, 'register.html', locals())
if len(password1) == 0:
password_error = '密码不能为空'
return render(request, 'register.html', locals())
if password1 != password:
password_error = '两次输入密码不一致'
return render(request, 'register.html', locals())
try:
# 使用get方法取出数据库中的信息作比较
username = models.User.objects.get(username=username)
username_error = "用户名已经存在"
return render(request, 'register.html', locals())
except:
# 密码加密为密文密码
hashcode = hashlib.md5()
hashcode.update(password1.encode())
password_m = hashcode.hexdigest()
# 创建新的用户到数据库中
username = models.User.objects.create(username=username, password=password_m)
successregister = """注册成功! <a href='/login/login/'>进入登陆页面</a>"""
return HttpResponse(successregister)
用户登录
def login(request):
if request.method == 'GET':
return render(request, '../html/login.html', locals())
if request.method == 'POST':
# 接收用户填写的信息
username = request.POST.get('username', '')
password = request.POST.get('password', '')
if username == '':
username_error = '用户名不能为空'
return render(request, '../html/login.html', locals())
if password == '':
password_error = '密码不能为空'
# 将提示信息放回到用户页面
return render(request, '../html/login.html', locals())
# 用户密码加密
m = hashlib.md5()
m.update(password.encode())
password_m = m.hexdigest()
# filter()用户过滤查看用户输入的信息和数据库中存入的信息比较后过滤出来。
# 更多的过滤器查询方法可以参考我的上一篇随笔 https://www.cnblogs.com/hotboy393/p/14671889.html
user = User.objects.filter(username=username, password=password_m)
if not user:
username_error = 'Your password or username is wrong !!'
return render(request, '../html/login.html', locals())
return render(request, '../html/index.html', locals())
用户退出
def logout(request):
# 登出/注销
# 删除session
if 'username' in request.session:
del request.session['username']
resp = HttpResponseRedirect('/login/login/')
# 删除cookie
if 'username' in request.COOKIES:
resp.delete_cookie('username')
return resp
index.html内容
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
{% if request.session and request.session.user %}
欢迎:{{ request.session.user.username }}
{% else %}
<a href="/login/logout/">退出登录</a>
<a href="/login/login/">登录</a>
<a href="/login/register/">注册</a>
{% endif %}
</body>
</html>`
login.html内容
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<style>
div > span{
color: red;
}
div > label{
display: inline-block;
width: 80px;
}
</style>
</head>
<body>
<form action="/login/login/" method="post">
<div>
<label>用户名</label>
<input type="text" name="username" value="{{ username }}"> {#将用户输入信息传递到views视图中#}
<span>{{ username_error }}</span>{#接收view视图中的错误提示信息#}
</div>
<div>
<label>密码</label>
<input type="password" name="password" value="{{ password }}">
<span>{{ password_error }}</span>
</div>
<div>
<input type="submit" value="登录">
</div>
</form>
</body>
</html>`
register.html内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
<style>
div > span{
color: red;
}
div > label{
display: inline-block;
width: 80px;
}
</style>
</head>
<body>
<form action="/login/register/" method="post">
<div>
<label>用户名</label>
<input type="text" name="username" value="{{ username }}">
<span>{{ username_error }}</span>
</div>
<div>
<label>密码</label>
<input type="password" name="password" value="{{ password }}">
<span>{{ passord_error }}</span>
</div>
<div>
<label>确认密码</label>
<input type="password" name="password1" value="{{ password1 }}">
<span>{{ password_error }}</span>
{#接收view视图中的值#}
</div>
<div>
<input type="submit" value="注册">
</div>
</form>
</body>
</html>`
django-自定义用户登录(个人笔记)的更多相关文章
- django自定义实现登录验证-更新版
django自定义实现登录验证 django内置的登录验证必须让开发者使用django内置的User模块,这会让开发者再某些方面被限制住 下面的模块是我自己自定义实现的django验证,使用方式和dj ...
- ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(使用官网提供的UI)
IdentityServer官方提供web页面,可以根据需求修改样式.具体UI下载跟配置参考官网文档. 文档地址:https://identityserver4.readthedocs.io/en/r ...
- Django:用户登录实例
Django:用户登录实例 一.源代码 1,login.html代码(登录界面): <!DOCTYPE html> <html lang="zh-CN"> ...
- ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)
官网接口详解文档地址:文档地址 (PS:可通过接口名称搜索相应接口信息.) 源码地址:https://github.com/YANGKANG01/IdentityServer4-IdentityAut ...
- Django自定义用户认证
自定义一个用户认证 详细参考官方文档: https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#django.contrib.au ...
- CMDB资产管理系统开发【day25】:Django 自定义用户认证
官方文档:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#substituting-a-custom-user-mode ...
- Django自定义用户认证系统之自定义用户模型
参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...
- SpringSecurity自定义用户登录
根据上一节的配置,默认在服务开启的时候会被要求自动的进行表单登陆.用到的用户名只能是一个固定的用户名user,它的密码是每次启动的时候服务器自动生成的.最常见的场景是我们的用户是从数据库中获取的. 1 ...
- Window上python开发--4.Django的用户登录模块User
Android系统开发交流群:484966421 OSHome. 微信公众号:oshome2015 在搭建站点和web的应用程序时,用户的登录和管理是差点儿是每一个站点都必备的. 今天主要从一个实例了 ...
- 如何使用Django实现用户登录验证
最初开始搞用户登录验证的时候感觉没什么难的,不就是增删改查中的查询数据库么,但是还是遇到许多小问题,而且感觉在查询数据库的时候,要把前端的数据一条一条的进行比对,会导致我的代码很丑,而且方式很不智,所 ...
随机推荐
- 听说USDN最近很火,它究竟是什么?
最近USDN在各大社区沸沸扬扬,甚至很多人都说USDN将会打破稳定币市场的格局,那么USDN究竟是怎样的一种稳定币呢?小编今天就帮助大家了解一下,新一代算法型稳定币USDN. USDN是基于公链NGK ...
- MySQL 导入外部数据
手工为数据库录入数据: 1 -- 使用数据库 2 use test; 3 4 -- 创建fruits数据表 5 create table fruits( 6 f_id char(10) not nul ...
- 【Notes_3】现代图形学入门——基础变换、MVP变换模型
基础变换(二维) 三维变化与二维变换矩阵类似 齐次坐标下的基础变换 Scale: \[S(s_x,s_y) =\begin{pmatrix} s_x &0 &0\\ 0 & s ...
- 通过CollectionUtils工具类判断集合是否为空,通过StringUtils工具类判断字符串是否为空
通过CollectionUtils工具类判断集合是否为空 先引入CollectionUtils工具类: import org.apache.commons.collections4.Collectio ...
- 写了一个vue+antdv的后台管理模板
1,项目简介 写在前面===>这是一个vue+antdv的后台管理模板 项目地址: https://github.com/BaiFangZi/vue-antd-manage 1.1,概述 最 ...
- macOS命令行切换Python版本
目录 brew安装anaconda3 anaconda3环境变量设置 安装双版本 命令后切换python环境 pip ide vscode set 参考 brew安装anaconda3 brew ca ...
- 如何在netcore下,愉快的使用IServiceProvider
之前一直做dotnet framework开发,依赖注入使用Autofac,Autofac的一般用法是服务启动时,将用到的接口.实现类名注入进去, 然后在服务其他地方如果使用该类时,直接在Contai ...
- PAT-1133(Splitting A Linked List)vector的应用+链表+思维
Splitting A Linked List PAT-1133 本题一开始我是完全按照构建链表的数据结构来模拟的,后来发现可以完全使用两个vector来解决 一个重要的性质就是位置是相对不变的. # ...
- CCF(通信网络):简单DFS+floyd算法
通信网络 201709-4 一看到题目分析了题意之后,我就想到用floyd算法来求解每一对顶点的最短路.如果一个点和任意一个点都有最短路(不为INF),那么这就是符合的一个答案.可是因为题目超时,只能 ...
- (十三)数据库查询处理之QueryExecution(2)
(十三)数据库查询处理之QueryExecution(2) 实验室这一周真的忙爆(虽然都是各种打杂的活)所以拖了很久终于在周末(摸鱼)把实验3做完了.同时准备把和查询这一块有关的博客补一下.然后就进入 ...