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-自定义用户登录(个人笔记)的更多相关文章

  1. django自定义实现登录验证-更新版

    django自定义实现登录验证 django内置的登录验证必须让开发者使用django内置的User模块,这会让开发者再某些方面被限制住 下面的模块是我自己自定义实现的django验证,使用方式和dj ...

  2. ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(使用官网提供的UI)

    IdentityServer官方提供web页面,可以根据需求修改样式.具体UI下载跟配置参考官网文档. 文档地址:https://identityserver4.readthedocs.io/en/r ...

  3. Django:用户登录实例

    Django:用户登录实例 一.源代码 1,login.html代码(登录界面): <!DOCTYPE html> <html lang="zh-CN"> ...

  4. ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)

    官网接口详解文档地址:文档地址 (PS:可通过接口名称搜索相应接口信息.) 源码地址:https://github.com/YANGKANG01/IdentityServer4-IdentityAut ...

  5. Django自定义用户认证

    自定义一个用户认证 详细参考官方文档: https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#django.contrib.au ...

  6. CMDB资产管理系统开发【day25】:Django 自定义用户认证

    官方文档:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#substituting-a-custom-user-mode ...

  7. Django自定义用户认证系统之自定义用户模型

    参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...

  8. SpringSecurity自定义用户登录

    根据上一节的配置,默认在服务开启的时候会被要求自动的进行表单登陆.用到的用户名只能是一个固定的用户名user,它的密码是每次启动的时候服务器自动生成的.最常见的场景是我们的用户是从数据库中获取的. 1 ...

  9. Window上python开发--4.Django的用户登录模块User

    Android系统开发交流群:484966421 OSHome. 微信公众号:oshome2015 在搭建站点和web的应用程序时,用户的登录和管理是差点儿是每一个站点都必备的. 今天主要从一个实例了 ...

  10. 如何使用Django实现用户登录验证

    最初开始搞用户登录验证的时候感觉没什么难的,不就是增删改查中的查询数据库么,但是还是遇到许多小问题,而且感觉在查询数据库的时候,要把前端的数据一条一条的进行比对,会导致我的代码很丑,而且方式很不智,所 ...

随机推荐

  1. PAUL ADAMS ARCHITECT:薪资追不上房价美一半家庭难买房

    尽管上一年度美国经济遭受重创,但美国房价依旧持续蹿扬,据最新调查显示,美国大部分地区的房价已经到了一般家庭无法负担的水准. 美国房价上涨持续强劲,主要受益美国人居家办公需求(受大环境影响,目前美国有7 ...

  2. 调整是为了更好的上涨,牛市下的SPC空投来了!

    2021年刚过没几天,比特币就开启了牛市的旅程,BTC涨到4万美元,ETH涨到1300多美元,BGV也涨到了621.05美元,牛市已然来袭. 虽然从近两日,比特币带领着主流币进行了一波调整,但是只涨不 ...

  3. ffmpeg中的日志控制、保存日志到指定文件、处理进度查询

    ffmpeg默认就会输出一些日志,包含编译的工具(gcc版本).可用的组件(--enable-xxxx).组件版本号码,如下图 这些信息是默认输出的,每次执行合作都会打印在控制台中,如果不想看这些信息 ...

  4. C++算法代码——Sumsets[uva10125]

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1278 题目描述 给你一个整数的集合S(里面所有的整数均不相同),请你找出最大的 d, ...

  5. Iterable object of JavaScript

    数组是可迭代的,所以数组可以用于for of,字符串也是可迭代的,所以字符串也可以用作for of,那么,对象呢? 试一试: var somebody = { start:0, end:100 } f ...

  6. Vue学习笔记-Vue.js-2.X 学习(一)===>基本知识学习

    一  使用环境: windows 7 64位操作系统 二  IDE:VSCode/PyCharm 三  Vue.js官网: https://cn.vuejs.org/ 四  下载安装引用 方式1:直接 ...

  7. lombok插件@Slf4j注解不生效问题解决办法

    最近在尝试使用日志工具Sfl4j,当时使用log时报错,找了好久才解决这个问题. 1.首先需要下载Lombok插件 File->settings->Plugins 搜索Lombok,点击安 ...

  8. redis.conf 配置说明

    redis.conf 配置项说明如下: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,R ...

  9. vue监听生命周期

    监听生命周期事件 内部监听声明周期函数 data() { return { monitor: null }; }, mounted() { this.monitor = setInterval(() ...

  10. C++数组的存储与初始化

    下面随笔给出C++数组的存储与初始化的细节内容. 数组的存储与初始化 一维数组的存储 数组元素在内存中顺次存放,它们的地址是连续的.元素间物理地址上的相邻,对应着逻辑次序上的相邻. 例如: