您现在的位置是: 网站首页 >Django >DjangoCRM客户关系管理 Django

【CRM客户关系管理】04.用户登录登录及访问控制

admin2018年11月23日 15:01 Django | Html | JavaScript | Python 1501人已围观

DjangoCRM客户关系管理简介 使用Django2.1.3+Bootstrap实现CRM系统,仿照Django Admin重写后台 Github地址:https://github.com/xyliurui/DjangoCRM Django版本:2.1.3

# 登录登出功能 ## 登录 ### 创建login.html 访问 https://v3.bootcss.com/examples/signin/ 另存网页,将文件夹Signin Template for Bootstrap_files中的样式移动到项目static对应目录,重命名Signin Template for Bootstrap.html为login.html后放在templates目录下,进行修改 首先修改base.html,并创建css(放在前部分`</head>`上方)和js(放在后部分`</body>`上方)的块 ```html {% block css %}{% endblock %} {% block js %}{% endblock %} ``` 然后修改login.html,记得添加`{% csrf_token %}` ```html {% extends 'base.html' %} {% load static %} {% block css %} <link href="{% static 'css/signin.css' %}" rel="stylesheet"> {% endblock %} {% block body %} <div class="container"> <form class="form-signin" method="post"> <h2 class="form-signin-heading">请登录</h2> <label for="inputName" class="sr-only">用户名</label> <input type="text" id="inputName" name="username" class="form-control" placeholder="用户名" required="" autofocus=""> <label for="inputPassword" class="sr-only">密码</label> <input type="password" id="inputPassword" name="password" class="form-control" placeholder="密码" required=""> <div class="checkbox"> <label> <input type="checkbox" value="remember-me"> 记住我 </label> </div> {% csrf_token %} <button class="btn btn-lg btn-primary btn-block" type="submit">登录</button> </form> </div> <!-- /container --> {% endblock %} ``` ### 创建登录视图 在项目中DjangoCRM目录下创建安views.py文件,和主urls.py在同一级 ![BLOG_20181123_150952_93](/media/blog/images/2018/11/BLOG_20181123_150952_93.png "博客图集BLOG_20181123_150952_93.png") 然后创建登录函数user_login,建议不要使用login,会和系统的函数冲突造成各类问题 ```python from django.shortcuts import render def user_login(request): return render(request, 'login.html') ``` ### 创建登录url 修改主urls.py增加登录url ```python from .views import user_login urlpatterns = [ path('admin/', admin.site.urls), path('crm/', include('crm.urls', namespace='crm')), path('login/', user_login, name='user_login'), # 用户登录 ] ``` 然后访问 http://127.0.0.1:8000/login/ 即会出现登录界面 ![BLOG_20181123_151000_39](/media/blog/images/2018/11/BLOG_20181123_151000_39.png "博客图集BLOG_20181123_151000_39.png") ### 验证登录功能 修改DjangoCRM目录中的user_login函数 ```python from django.shortcuts import render, redirect, reverse from django.contrib.auth import authenticate, login def user_login(request): if request.method == 'POST': username = request.POST.get('username', None) password = request.POST.get('password', None) # 验证帐密 user = authenticate(username=username, password=password) if user: # 登录并生成session login(request, user) return redirect(reverse('crm:index')) return render(request, 'login.html') ``` ### 登录用户显示 修改base.html模板,增加顶部登录用户的显示,在模板中使用`request.user.is_authenticated`来判断用户是否登录,如果已登录就显示用户名那个 ```html <ul class="nav navbar-nav navbar-right"> <li><a href="#">功能一</a></li> <li><a href="#">功能二</a></li> {% if request.user.is_authenticated %} <li><a href="#">{{ request.user }}</a></li> {% else %} <li><a href="{% url 'user_login' %}">点击登录</a></li> {% endif %} </ul> ``` ## 登出 ### 创建登出视图 在DjangoCRM目录的views.py中创建退出登录视图 ```python from django.contrib.auth import authenticate, login, logout def user_logout(request): logout(request) return redirect(reverse('user_login')) ``` ### 创建登出url 修改主urls,增加登出url ```python from .views import user_login, user_logout urlpatterns = [ path('admin/', admin.site.urls), path('crm/', include('crm.urls', namespace='crm')), path('login/', user_login, name='user_login'), # 用户登录 path('logout/', user_logout, name='user_logout'), # 退出登录 ] ``` 登出后回到登录界面 ## 登录用户及登出顶部显示 访问 https://v3.bootcss.com/examples/navbar-static-top/ 查看网页源码,复制导航条下拉菜单功能区 ![BLOG_20181123_151028_18](/media/blog/images/2018/11/BLOG_20181123_151028_18.png "博客图集BLOG_20181123_151028_18.png") ### 修改base.html下拉导航 ```html <ul class="nav navbar-nav navbar-right"> <li><a href="#">功能一</a></li> <li><a href="#">功能二</a></li> {% if request.user.is_authenticated %} <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ request.user }}<span class="caret"></span></a> <ul class="dropdown-menu"> <li><a href="#">用户信息</a></li> <li role="separator" class="divider"></li> <li class="dropdown-header">当前用户:{{ request.user }}</li> <li><a href="{% url 'user_logout' %}">退出登录</a></li> </ul> </li> {% else %} <li><a href="{% url 'user_login' %}">点击登录</a></li> {% endif %} </ul> ``` ![BLOG_20181123_151038_74](/media/blog/images/2018/11/BLOG_20181123_151038_74.png "博客图集BLOG_20181123_151038_74.png") ![BLOG_20181123_151052_17](/media/blog/images/2018/11/BLOG_20181123_151052_17.png "博客图集BLOG_20181123_151052_17.png") 用户未登录,显示点击登录链接,登陆后,显示用户名和退出登录。 ## 登录错误消息提示 ### 修改login.html错误提示标签 在密码框下方增加p标签,用于显示帐密输入错误的提示信息 ```html <p style="color: coral">{{ login_msg }}</p> ``` ### 增加user_login登录视图消息 ```python def user_login(request): login_msg = '' if request.method == 'POST': username = request.POST.get('username', None) password = request.POST.get('password', None) # 验证帐密 user = authenticate(username=username, password=password) if user: # 登录并生成session login(request, user) return redirect(reverse('crm:index')) login_msg = '用户名或密码错误!' return render(request, 'login.html', locals()) ``` ![BLOG_20181123_151100_92](/media/blog/images/2018/11/BLOG_20181123_151100_92.png "博客图集BLOG_20181123_151100_92.png") ## 要求视图登录才能访问 ### 添加login_required装饰器 有的页面只有登录后才能访问,在视图上方添加`login_required`装饰器 ```python from django.shortcuts import render from django.contrib.auth.decorators import login_required @login_required def index(request): return render(request, 'crm/index.html') ``` ### settings中设置LOGIN_URL settings中设置如果没登录访问跳转的地方 当访问 http://127.0.0.1:8000/crm/ 就会跳转到 http://127.0.0.1:8000/accounts/login/?next=/crm/ 改链接无法使用的,需要自定义登录URL 在settings中添加 ```python # 如果没有登录,指定登录url from django.urls import reverse_lazy LOGIN_URL = reverse_lazy('user_login') ``` 会自动跳转到 http://127.0.0.1:8000/login/?next=/crm/ ### 获取next值跳转 修改user_login视图,`request.GET.get('next')` ```python def user_login(request): login_msg = '' if request.method == 'POST': username = request.POST.get('username', None) password = request.POST.get('password', None) next_url = request.GET.get('next') # 验证帐密 user = authenticate(username=username, password=password) if user: # 登录并生成session login(request, user) if next_url: return redirect(next_url) return redirect(reverse('crm:index')) login_msg = '用户名或密码错误!' return render(request, 'login.html', locals()) ```

很赞哦! (0)

文章交流

  • emoji
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行2343天
  • 系统信息:Linux
  • 后台程序:Python: 3.8.10
  • 网站框架:Django: 3.2.6
  • 文章统计:257 篇
  • 文章评论:63 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 公众号:微信扫描二维码,关注我们
  • QQ群:QQ加群,下载网站的学习源码
返回
顶部
标题 换行 登录
网站