Django实现简单登录的示例代码
作者:d粥 发布时间:2022-03-26 04:10:18
目录
创建django项目
使用模型的url.py
加载静态文件
页面跳转
创建数据库模型
提交
表单提交
ajax提交
创建django项目
创建项目的命令行语句: django-admin startproject newsManage
将templates文件放在模板里面,会显得更简洁一些,所以我就先创建模板啦。
命令行语句:django-admin startapp newsModel
创建好模型把模型名加到setting文件下 INSTALLED_APPS 里面 , 不然到时候会报错说找不到的
创建templates目录,来存放html,js,css等文件,在setting文件下 TEMPLATES 配置templates的文件路径 'DIRS': [os.path.join(BASE_DIR, 'templates')],
最后大致的目录结构就是这样了
使用模型的url.py
创建项目的时候会自带一个urls.py文件,是用来配置路径的,都写在一个urls里面会显得比较乱,放在模板里面就完美的解决了这个问题
路径:newsManage/newsManage/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('newsModel.urls'))
]
在newsModel模板下创建urls.py文件 路径:newsManage/newsModel/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.login, name='login')
]
路径:newsManage/newsModel/views.py
def login(request):
return render(request, 'login.html')
在templates下创建login.html文件,然后写登录页面(用模板也太香了吧)
运行启动服务器 python manage.py runserver
加载静态文件
static就是放静态文件的像 css,js 加载静态文件也需要配置,setting最后一行加上
STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static") ]
在html里面引用,需要在前面加上{% load static %}
然后就可以引用了 <link href="{% static 'css/style.css' %}" rel="external nofollow" rel="stylesheet">
页面跳转
path('/register', views.register, name='register')
像上面这个注册的url,可以通过路径 或者 name 跳转
<a class="text-primary" href="{% url 'register' %}" rel="external nofollow" >Sign up</a>
点击这个链接就可以跳转到注册页面啦
创建数据库模型
在 newsManage/newsManage/init.py 配置pymysql, 没有下载的话需要去下载pymysql
import pymysql
pymysql.install_as_MySQLdb()
路径:newsManage/newsModel/models.py(类名就是表名)
class user(models.Model):
username = models.CharField(max_length=30)
password = models.CharField(max_length=30)
email = models.EmailField(unique=True, blank=False)
运行命令行,生成表结构
python manage.py migrate
python manage.py makemigrations
python manage.py migrate newsModel
数据库的表名就是 模型名_类名( newsModel_user )
admin/ 路径是可以直接在浏览器上操作数据库的
提交
表单提交
后台判断登录是否成功
def toLogin(request):
if request.method == 'POST':
username = request.POST.get("username")
password = request.POST.get("password")
users = user.objects.all()
for u in users:
if u.username == username and u.password == password:
return redirect("home")
context = {"msg": "用户名或密码错误!"}
return render(request, "login.html", context)
ajax提交
data = eval("(" + data + ")"); 灰常重要,记得转换一下,不然取不到,但好像别人不用转也可以。。。。
$.ajax({
type: 'POST',
url: "{% url 'toLoginByAjax' %}",
data: {
'username': $("#username").val(),
'password': $("#password").val()
},
dataType: 'text',
success: function (data) {
data = eval("(" + data + ")");
if (data.code == 0){
window.location.href = "{% url 'home' %}"
} else {
$(".msg").html(data.msg);
setTimeout(function(){//定时器
$(".msg").css("display","none");//将图片的display属性设置为none
},3000);//设置三千毫秒即3秒
}
},
error: function () {
console.log("somewhere is wrong")
}
})
def toLoginByAjax(request):
username = request.POST.get("username")
password = request.POST.get("password")
users = user.objects.all()
for u in users:
if u.username == username and u.password == password:
message = {"code": 0, "msg": "登陆成功!"}
return JsonResponse(message)
message = {"code": 400, "msg": "登陆失败,用户名或密码错误!"}
return JsonResponse(message)
就可以成功登录到主页(home.html)啦! 🤸🏻♀️🤸🏻♀️🤸🏻♀️
来源:https://juejin.cn/post/7026159799662280734


猜你喜欢
- 一、Go语言实战——自定义集合Set在Go语言中有作为Hash Table实现的字典(Map)类型,但标准数据类型中并没有集合(Set)这种
- 一:区别:1、var声明的变量属于函数作用域,而let和const声明的变量属于块级作用域;(js作用域在上篇文章) 2、var声
- 利用Python写了一个小脚本想要传给使用Windows但没有装Python的朋友执行,这时候就可以利用将档案包装成exe档案,让没有Pyt
- 本文实例讲述了Python实现的基数排序算法。分享给大家供大家参考,具体如下:基数排序(radix sort)属于“分配式排序”(distr
- 一、数字类型。数字类型按照我的分类方法分为三类:整数类、小数类和数字类。 我所谓的“数字类”,就是指DECIMAL
- 1. 文件夹结构指定文件夹:E:/Code/Python/test指定文件:test.txt指定文件夹下的目录及文件:文件夹a:a.txtt
- 要做到这一点,就要尽量地使用缓存,经常地从缓存中获得以前的消息。幸运的是目前大多数WAP设备都有一定级别的缓存,在默认情况下,会尝试最大化的
- 在写完前面“模块化”相关的文章后,感觉试图用“模块化”本身去讲什么是“模块化”真是不容易讲得清。相信大家都多多少少能理解什么是“模块化”,但
- 前言在实际业务场景中,我们有时候会碰到一些延时的需求:例如,在电商平台,运营在管理后台添加商品后,不需要立刻展示在前台,而是在之后某个时间点
- 本文将带领大家由浅入深的去窥探一下,这个装饰器到底是何方神圣,看完本篇,装饰器就再也不是难点了.一、什么是装饰器网上有人是这么评价装饰器的,
- 使用通用视图的方法是在URLconf文件中创建配置字典,然后把这些字典作为URLconf元组的第三个成员。例如,下面是一个呈现静态“关于”页
- 具体代码如下所述:import sysfrom PySide2.QtGui import *from PySide2.QtCore impo
- 变量全都是引用跟其他编程语言不同,Python的变量不是盒子,不会存储数据,它们只是引用,就像标签一样,贴在对象上面。比如:>>
- 本文实例为大家分享了Python深度优先算法生成迷宫,供大家参考,具体内容如下import random #warning: x and y
- # -*- coding: GBK -*- from ctypes import * dll = windll.LoadLibrary(
- 这只是个asp小技巧类的东西,它虽然适合在每个不同文件名里调用这个函数,但是也是有前提的,下面让我们来仔细看看其中的原委。 &n
- 因为刚学vue然后自己自习了一下axios,然后想写一个简单的查询后台数据<tr v-for=" user in uList
- 1.byte和str互转b = b"example" s = "example" bytes(s,
- 在WEB2.0 网页充斥的年代,身边无时无刻都听到这样的声音:“拒绝海报式设计,要做有用的设计,要简洁,要清爽,要大气”产品经理
- 1、Introduction之前写过2篇文章,分别是:Mysql主从同步的原理 Myql主从同步实战 基于此,我们再实