前言
django手搭简易的注册登录,不使用django.contrib.auth
一、django是什么?
django 最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发。采用mtv架构(model,template,view)。
说明文档
二、建立django项目
1.新建项目
选择django新建项目
基本环境
- python版本为3.10
- mysql版本为8.0
- django版本为5.0.3
asgiref==3.8.0 async-timeout==4.0.3 cffi==1.16.0 cryptography==42.0.5 django==5.0.3 django-redis==5.4.0 et-xmlfile==1.1.0 fuzzywuzzy==0.18.0 jieba==0.42.1 numpy==1.26.4 openpyxl==3.1.2 pandas==2.2.1 pillow==10.3.0 pycparser==2.21 pymysql==1.1.0 python-dateutil==2.9.0.post0 pytz==2024.1 redis==5.0.3 six==1.16.0 sqlparse==0.4.4 typing_extensions==4.10.0 tzdata==2024.1 zhon==2.0.2
2.需要安装的包
pip install django pip install django-redis pip install pymysql
3.新建app
python manage.py startapp app名称
4.修改settings.py
增加
import pymysql pymysql.install_as_mysqldb()
修改
installed_apps = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app名称' ] middleware = [ 'django.middleware.security.securitymiddleware', 'django.contrib.sessions.middleware.sessionmiddleware', 'django.middleware.common.commonmiddleware', #'django.middleware.csrf.csrfviewmiddleware', 'django.contrib.auth.middleware.authenticationmiddleware', 'django.contrib.messages.middleware.messagemiddleware', 'django.middleware.clickjacking.xframeoptionsmiddleware', ] databases = { 'default': { 'engine': 'django.db.backends.mysql', 'name': '数据库名称', 'user': "用户名", 'password': '密码', 'port': 3306 # 'location': ip } } static_url = '/static/' static_root = os.path.join(base_dir, 'staticfiles') staticfiles_dirs = [ os.path.join(base_dir, 'static'), # 指定静态文件目录 ] media_root = os.path.join(base_dir, 'media') media_url = '/media/'
三、在app中写后端
1.model.py
class webuser(models.model): class meta: db_table = "web_user" u_id = models.charfield(primary_key=true, max_length=50) u_pwd = models.charfield(max_length=30) u_name = models.charfield(max_length=20)
数据库可以自己去建表,表名是web_user,有三个属性,就是u_什么的这些。
也可以使用如下代码,在终端输入后,迁移模型。
python manage.py makemigrations python manage.py migrate
2.views.py
在app中会有views.py文件
def check_login(request): if request.method=="post": print("login") u_id = request.post.get("u_id") u_pwd = request.post.get("u_pwd") try: user = webuser.objects.get(u_id=u_id) print(user) except exception as e: user = none print(e) else: if u_pwd == user.u_pwd: print("success") # 登录成功 request.session["current_user"] = { "u_id": user.u_id, "u_name": user.u_name, # 你可以根据需要添加更多属性 } return httpresponse("ok") request.session["current_user"] = none return render(request, "login.html", {'msg': '账号或密码错误'}) elif request.method=="get": return render(request, "login.html") else: redirect("/") def register(request): if request.method=="post": u_id = request.post.get("u_id") u_pwd = request.post.get("u_pwd") u_name = request.post.get("u_name") try: print("ok") user = webuser(u_id=u_id,u_pwd=u_pwd,u_name=u_name) except exception as e: print(e) return jsonresponse({ 'msg': 'register fail', 'code': 403 }) else: user.save() return jsonresponse({ 'code': 200, 'msg': 'register success', }) elif request.method=="get": return render(request,"register.html") else : render(request,'index.html') def logout(request): request.session.clear() return httpresponse("logout") def index(request): return render(request, "index.html")
3.配置路由
在app中新建urls.py
from django.urls import path urlpatterns = [ path("",index,name="index"), path('register/',register,name="register"), path('login/',check_login,name="login"), path('logout/',logout,name="logout") ]
主路由(刚建完项目时的那个目录下)修改如下
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('', include('app名称.urls')), path('admin/', admin.site.urls), ]
四、在template写前端
根据路由,我们有三个页面,首页、登录和注册。
index.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <h1>首页</h1> <p> <a href="{% url 'register' %}" rel="external nofollow" >register</a> <a href="{% url 'login' %}" rel="external nofollow" >login</a> </p> </body> </html>
login.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <h1> login </h1> <div style="color:red;font-size:10pt;">{{ msg }}</div> <form action="{% url 'login' %}" id="frmlogin" method="post"> <label> <input type="text" name = "u_id" placeholder="请输入您的电子邮箱"/> </label><br/> <label> <input type="password" name="u_pwd" placeholder="password"/> </label><br/> <label> <input type="submit" value="submit"> </label> </form> </body> </html>
register.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <h1> register </h1> <form action="{% url 'register' %}" id="register-form" method="post"> <label> <input type="text" name="u_id" placeholder="请输入您的电子邮箱"/> </label><br/> <label> <input type="password" name="u_pwd" placeholder="password"/> </label><br/> <label> <input type="text" name="u_name" placeholder="username"/> </label><br/> <label> <input type="submit" value="submit"> </label> </form> <script> document.getelementbyid('register-form').addeventlistener('submit', function (event) { event.preventdefault(); console.log("script") alert("script") var form = this; var formdata = new formdata(form); fetch('/register/', { method: 'post', body: formdata }) .then(response => response.json()) .then(data => { window.alert(data.msg); // 显示消息弹窗 if (data.code === 200) { // 检查状态码是否为 200 settimeout(function () { // 使用 settimeout 来确保弹窗关闭后再重定向 window.location.href = '{% url 'login' %}'; // 重定向到登录页面 }, 0); // 0 毫秒延迟,但足以让浏览器处理弹窗的关闭 } }) .catch(error => { console.error('error:', error); }); }); </script> </body> </html>
五、启动
1. 首页
2. 注册
3. 登录
六、关于报错
可能会碰到许多报错
- 数据库未连接,或者数据库里的表不对:可以删除app目录下的migrations再重新迁移试试
- 各种包的缺失
- 网页报错:根据报错信息去修改
- 点击了submit没反映:通过浏览器console和pycharm终端打印信息看看哪里出问题了
总结
简单的登录系统制作完了,但大部分情况可能还是用django自带的django.contrib.auth进行登录和注册。接下来可以继续扩展用户的删除、修改和查询。
到此这篇关于django制作简易注册登录系统的实现示例的文章就介绍到这了,更多相关django制作注册登录系统内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论