(四)注册登录--重用Django
一、使用已有登录功能
(1)进入Lib\sitepackages\django\contrib\admin\templates\registration下,将对应模板,复制到项目template模板中
(2)重写登录模板,且放入templates/account文件夹
(3)设计模型使用已有的User模型
(4)设计注册模型,使用已有的User模型,及进行新扩展
设计及代码开发步骤逻辑:设计完数据模型,编写表单类,创建视图函数,设置前端模板,设置URL,GET方法先展示前端模板,后POST方法编写表单类修改数据库,及存储数据库逻辑
1、设计数据模型
# models.py文件示例
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User,unique=True,on_delete=None)
birth = models.DateField(blank=True,null=True)
phone = models.CharField(max_length=11,null=True)
# createTime = models.DateTimeField(auto_now_add=True)
def __str__(self):
return 'user {}'.format(self.user.username)
2、编写表单类
account/目录下,新增forms.py文件
from django import forms
from django.contrib.auth.models import User
from account.models import UserProfile,UserInfo
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput) # widget=forms.PasswordInput密码文显示
3、编写视图函数
def user_login(request):
if request.method == "GET":
login_form = LoginForm()
return render(request,"account/login.html",{"form":login_form})
elif request.method == "POST":
pass
4、设置前端模板
注意:表单需要从视图函数,进行传递到模板
{% extends "base.html" %}
{% block title %}标题{% endblock %}
{% block content %}
{#内容#}
{#使用表单#}
<div class="container">
<form action="." method="POST">{%csrf_token%}
<div class="spadding">
<label for="{{ form.username.id_for_label }}" class="title">用户名:</label>
{{ form.username }}
</div>
<div class="spadding">
<label for="{{ form.password.id_for_label }}" class="title">密码:</label>
{{ form.password }}
</div>
<input type="submit" class="btn btn-block btn-primary" value="登录">
</form>
</div>
{% blockend %}
<style>
h1 {
color:#00BBFF;
}
//控制输入框左右对齐
.title {
float: left;
width: 70px;
text-align: left;
padding-right: 10px;
}
div.spadding {
margin: 10px;
padding-bottom: 10px;
width: 300px;
}
</style>
5、设置URL,从Lib\sitepackages\django\contrib\auth\urls.py里配置使用
path('newlogin/',auth_views.LoginView.as_view(template_name="account/login.html"),name="user_login"),
template_name=重新定向自定义模板
name=给路径命名
6、POST方法编写表单类修改数据库,及存储数据库逻辑
def user_login(request):
if request.method == "GET":
login_form = LoginForm()
return render(request,"account/login.html",{"form":login_form})
elif request.method == "POST":
login_form = LoginForm(request.POST)
if login_form.is_valid():
user = authenticate(login_form.cleaned_data)
if user:
login(request,user)
return HttpResponse("您已经登录成功....")
else:
return HttpResponse("您的用户名或密码错误,请重新登录")
else:
login_url = reverse("account:user_login")
return redirect(login_url)
(四)注册登录--重用Django的更多相关文章
- Django+bootstrap+注册登录系统
转自:https://www.cnblogs.com/robindong/p/9610057.html Robin_D 博客园 首页 新随笔 联系 订阅 管理 随笔 - 10 文章 - 0 评论 ...
- 巨蟒django之CRM1 需求分析&&表结构设计&&注册登录验证
1.需求分析 .项目 ()业务 ()权限的管理 .CRM customer relationship management 客户关系管理系统 .谁来使用CRM? 销售&&班主任& ...
- django简单实现注册登录模块
源码下载:https://files.cnblogs.com/files/hardykay/login.zip 新建项目(我使用pycharm开发,也可以使用如下命令建立项目 ) cmd命令行,前提需 ...
- python相关注册登录方式
1.使用django自带功能实现登录/退出登录 使用django自带登录功能,前提生成用户(用户注册)使用的是django自带的user,或称models中用户表继承于django自带的user 1. ...
- 基于 Django2 实现邮箱注册登录功能
1. 开发环境 Python 3.6.5 Django 2.2 2. 项目功能 用户登录 邮箱注册 图形验证码 找回密码 修改密码 用户退出 3. 项目创建 首先创建项目: django-admin ...
- 一步步开发自己的博客 .NET版(3、注册登录功能)
前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做 ...
- 如何设计一个 App 的注册登录流程?
移 动设备发力之前的登录方式很简单:用户名/邮箱+密码+确认密码,所有的用户登录注册都是围绕着邮箱来做.随着移动设备和社交网络的普及,邮箱不再是唯 一,渐渐的出现了微博,QQ,微信等第三方登录方式,手 ...
- Node.js基于Express框架搭建一个简单的注册登录Web功能
这个小应用使用到了node.js bootstrap express 以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...
- vue2.0+koa2+mongodb实现注册登录
前言 前段时间和公司一个由技术转产品的同事探讨他的职业道路,对我说了一句深以为然的话: "不要把自己禁锢在某一个领域,技术到产品的转变,首先就是思维上的转变.你一直做前端,数据的交互你只知道 ...
随机推荐
- day6_python之pickle、shelve序列化和反序列化
pickle.shelve,python私有,支持所有python数据类型 一.pickle dic={'name':'egon','age':18} print(pickle.dumps(dic)) ...
- laravel5.6 发送邮件附带邮件时,Unable to open file for reading,报错文件路径问题
https://stackoverflow.com/questions/48568739/unable-to-open-file-for-reading-swift-ioexception-in-la ...
- DispatcherTimer 应用实例
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); //实例化 Dispat ...
- 本地测试读取redis和普通文件缓存的速度,redis慢一倍?
重新测试了,换成了Linux服务器,php5.6,512内存.连续读取1千次不同的文件(每个文件41KB),redis也是1千个不同的key,文件缓存还是比redis快! 但是,但是,后来我换成连续读 ...
- logback 打印mybatis sql mybatis 日志打印sql语句和返回结果
logback 打印sql语句: 在logback日志文件中开启debug模式 <logger name="com.ibatis" level="DEBUG&quo ...
- NIO 中文乱码自我解决的简单DEMO
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea ...
- H3C 帧中继配置示例
- Python--day46--MySQL自定义函数
1,mysql自定义函数(mysql函数会降低查找速度,使用 了函数的行和列不能再用索引查找了,这样对性能要求高的需求就不能这样写) 函数调用 select f(参数1,参数2): 对函数进行调用:
- Xshell + SVN使用
切换目录 cd+想跳转到的目录下 文件浏览 ls ll (ll 信息全) svn更新 svn up 编辑 vi vi的命令 文件保存与退出: :q 在文件未作任何修改的情况下退出. :q! 强制退出, ...
- 常用mime.types
以下是从nginx配置文件mime.types中提取出的最常用的文件格式, 整理了下, 方便查看 类型 文件格式 default_type application/octet-stream - tex ...