Rosmontis&迷迭香的博客&鹤望兰分部

Rosmontis&迷迭香的博客
僅用於Bing訪客使用,若需要最新的文章,建議訪問rosmontis.com
  1. 首页
  2. 正文

Django—用户注册登录功能实现

2022年5月6日 7点热度 0人点赞 0条评论

1.django 的app文件介绍

(1)app各文件介绍

一个刚建好的app文件大概都是这是这样的,如果缺少文件的话,自己加上去就好了

(2)各文件功能介绍

baseinfo

       migrations            #数据库迁移产生的文件,后面会详细介绍

       _init_.py         #数据迁移的起始文件,迁移成功之后还会产生其它文件,等下演示

       _init_.py         #app的起始文件,基本不需修改

       admin.py       #基本不用改

       apps.py         #基本不用改

       models.py      #模型文件,数据库建表代码写在这里

       tests.py          #测试文件,基本不用动

       urls.py           #路由文件,分配接口

       views.py        #views.py里面是具体的逻辑函数

2.django原理介绍

(1)简单介绍

django采用MTV模式:视图层是模板和模型的“桥梁”。

模型层(model)

      对于web应用中的数据进行构建和操作。

视图层(view)

       封装处理用户的请求与返回的响应逻辑。

模板层(template)

       提供设计友好的语法来展示信息给用户。

(2)具体数据流动如下图:

3.注册功能后台编写

(1)建立数据库user表单

在baseinfo中的models.py中建立User模型,并将数据表单命名为user_info

from django.db import models

# 定义用户模型类 User


class User(models.Model):
    rank_list = (
        (0, '普通会员'),
        (1, '白银会员'),
        (2, '黄金会员'),
        (3, '钻石会员')
    )
    id = models.IntegerField(primary_key=True)
    name = models.CharField(
        max_length=20, verbose_name='姓名', null=False, default="")
    tel = models.CharField(
        max_length=11, verbose_name='联系电话', null=False, default="")
    address = models.CharField(
        max_length=60, verbose_name='联系地址', blank=False, default="")
    password = models.CharField(
        max_length=60, verbose_name='密码', blank=False, default="")
    grade = models.IntegerField(default=0)
    rank = models.SmallIntegerField(default=0, choices=rank_list)

    class Meta:
        db_table = 'user_info'  # 指明数据库表名
        verbose_name = '用户信息'  # 在admin站点中显示的名称

然后迁移数据库

在terminal里面输入python manage.py makemigrations

然后输入python manage.py migrate

控制台截图

然后可以发现migration多了一个0001_initial.py

内容如下图

数据库多了一个user_info

表结构如下:

(2)新建url

修改express的urls.py

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    # path('admin/', admin.site.urls),

    path('baseinfo/', include('baseinfo.urls'))   # 添加
]

(3)在baseinfo的views.py中添加add函数

from django.shortcuts import render

# Create your views here.
import json  # 添加
from django.http import JsonResponse  # 添加
from django.views.decorators.csrf import csrf_exempt  # 解决前端post请求 csrf问题
from baseinfo.models import User


@csrf_exempt
def add(request):
    # 判断发送请求方法是否是POST方法
    if request.method == "POST":
        # 获取发送内容
        id = '1'
        data = json.loads(request.body)
        print(data, 'data')
        name = data.get('name')
        password = data.get('pwd')
        tel = data.get('tel')
        address = data.get('address')
        print(name, type(tel))
        # 进行数据库操作
        # 从models文件中获取User对象
        user = User()
        # 给对象赋值
        user.tel = tel
        user.name = name
        user.id = id
        user.password = password
        user.address = address
        # 插入数据
        user.save()
        return JsonResponse({'code': '200'})

(4)在baseinfo中的urls.py添加url

from django.urls import path

from . import views

urlpatterns = [
    path('add/', views.add, name='add'),
]

这样的话,后台基本就配置好了,

不过如果前端编辑时依旧使用npm run dev ,这时请求Django接口可能会出现跨域问题

(5)解决跨域问题

①安装django-cors-headers

pip install django-cors-headers

②修改express的settings.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',  # 添加
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

CORS_ORIGIN_ALLOW_ALL = True   # 添加

4.注册功能前端编写

(1)vue项目各文件介绍

这个是别人写的,我感觉很好,就直接拿过来用了,需要修改一点的是src下的components文件夹我们是绝对不能删除的,我们的系统功能比较复杂,所有功能都写在App.vue里面的话,会搞死人的

(2)vue文件各部分作用介绍(以App.vue为例)

vue可以分为三个部分

第一个是<template></template>,这个里面主要写html标签,负责展示页面有哪些内容

第二个是<script></script>,里面主要是js语句,负责页面逻辑功能的实现

第三个是<style></style>,里面主要是css样式,负责页面样式展示

这里面的东西很多很杂,我一下也没办法全部讲清楚,具体用的时候,还请多多百度,或者在群里问。

(3)注册页面编写

注册页面要实现的功能:a.获取用户输入的信息,b.把信息发送给后台

①引入vue.js

我在新建rigister.vue文件的时候,发现没有.vue文件选项,所以引入了vue.js,如果可以直接新建的话,请跳过这步

安装之后可以发现App.vue变成这个样子了

②在components文件夹新建rigister.vue

③获取输入框值的代码编写

获取输入框的方法有很多种,这里只介绍一种,想详细了解的,可以看这个链接https://blog.csdn.net/qq_39043923/article/details/88688420

<template>
  <div>
    <input class="login-input" type="text"v-model="username" placeholder="请输入账号">
    <input class="login-input" type="password"v-model="password" placeholder="请输入密码">
    <input class="login-input" type="text"v-model="tel" placeholder="请输入电话">
    <input class="login-input" type="text"v-model="address" placeholder="请输入地址">
    <div class="login-button" @click="register" type="submit">注册</div>
  </div>
</template>

<script>
export default {
  name: "register",
  data() {
    return {
      username: '',
      password: '',
      tel: '',
      address: ''
    }
  },
  methods: {
    register(){
      console.log(this.username)
      console.log(this.password)
      console.log(this.tel)
      console.log(this.address)
    }
  }
}
</script>

<style scoped>

</style>

④修改路由

目前只是写好了前端页面,还没有修改router文件,页面无法显示出来

修改router中的index.js文件,

将刚才页面的路径定义为/register

import Vue from 'vue'
import Router from 'vue-router'
import Register from '../components/register' //添加
Vue.use(Router)

export default new Router({
  routes: [
    //添加
    {
      path: '/register',
      name: 'register',
      component: Register
    },
  ]
})

修改App.vue文件

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
//添加
export default {
  name: 'Register'
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

⑤关闭关闭Eslint

在新建vue项目不小心开了Eslint,导致代码书写格式经常报错,在这里把Eslint关闭

在你的项目中找到build----->webpack.base.conf.js文件

找到如下代码块,注释就OK了

⑥运行项目

在frontend路径下输入

npm run  dev

因为我们刚才写的页面的地址是register,所以在网址后面输入http://localhost:8080/#/register

看到结果是这样的

按F12打开控制台

输入内容,点击注册后可以看到获取到内容了

(4)发送数据给后台

①安装axios

输入

npm install axios

②重写register函数

之前的register函数只能输出输入框的内容,不能发送请求,这里采用post请求方式发送。

在这里解释一下这条url的访问过程http://127.0.0.1:8000/baseinfo/add/

http://127.0.0.1:8000/这一部分是你后台项目运行的地址,根据这一部分前端会发请求到后台,然后会从express的urls.py文件找出“baseinfo/”对应app的urls.py文件,在这里也就baseinfo/urls.py,然后根据add/找到对应的view里面的函数,在这里就是就是add函数,进行数据操作。

<script>
import axios from 'axios'//添加
export default {
  name: "register",
  data() {
    return {
      username: '',
      password: '',
      tel: '',
      address: ''
    }
  },
  methods: {
    register() {
      let url = 'http://127.0.0.1:8000/baseinfo/add/';
      console.log(typeof (this.password),typeof (this.username),typeof (this.tel))
      axios.post(url, {
        "name": this.username,
        "pwd": this.password,
        "tel": this.tel,
        "address": this.address
      }).then(response => {
        console.log(response.data)
        if (response.data.code === '200') {
          console.log('it is ok')
          this.message = response.data.info.username;
        } else if (response.data.code === '400') {
          this.message = response.data.msg;
        }
      }).catch(error => {
        console.log(error)
      })
      // console.log(this.username)
      // console.log(this.password)
      // console.log(this.tel)
      // console.log(this.address)
    }
  }
}
</script>

③查看结果

分别运行前端后台项目后,在浏览器里输入http://localhost:8080/#/register

然后输入信息,点击注册

可以看到前端返回成功

后台也没有问题

数据库数据添加数据成功

这次的注册只是一次简单演示,其实还有很多功能没有实现,比如电话位数的验证,id的自动生成,地址的可视化选择,页面样式的优化等等,不过目前的教程已经足够开始写代码了,遇到问题的话,可以自行百度

标签: 暂无
最后更新:2022年6月8日

Rosmontis

这个人很懒,什么都没留下

点赞

文章评论

取消回复

Rosmontis

这个人很懒,什么都没留下

本站文章约1个月与rosmontis.com同步一次

最新 热点 随机
最新 热点 随机
【拉环社】【Onedrive】仰望夜空的星辰Fine Days/抬头看看吧,看那天上的繁星Fine Days(FD)完整汉化+全CG(4.9GB) 【拉环社】【Onedrive】仰望夜空的星辰IF/抬头看看吧,看那天上的繁星IF -Interstellar Focus-(FD)完整汉化+全CG(2.8GB) 【漩涡社】鲸神的提亚斯提拉/鲸神的Tearstilla 鯨神のティアスティラ 完整汉化+全CG(3.2GB) 【拉环社】【Onedrive】仰望夜空的星辰/抬头看看吧,看那天上的繁星(本作) 见上げてごらん、夜空の星を 完整汉化+全CG(6.5GB) 【SAGA PLANETS】【Onedrive】FD:金色loveriche-金色时光- 金色ラブリッチェ -Golden Time- 完整汉化+全CG(5.5GB) 【SAGA PLANETS】【Onedrive】金辉恋曲四重奏/金色Loveriche 金色ラブリッチェ 完整汉化+全CG(5.6GB) 【Onedrive】娇蛮任性HIGHSPEC ワガママハイスペック 完整汉化(7.2GB) 【Alcot】【Onedrive】FD:将军大人芳华正茂 Fandisc 将軍様はお年頃 ふぁんでぃすく -御三家だヨ!全員集合- 完整汉化+全CG(3.0GB) 【Alcot】【Onedrive】将军大人芳华正茂/将军大人风华正茂 将军様はお年顷 完整汉化+全CG(4.20GB) 国产动画《京剧猫》,被运营耽搁的好动画,哀其不幸怒其不争! 【Onedrive】架向星空之桥AA 架向星空之桥FAN DISC 星空へ架かる桥AA 完整汉化(3.6GB) 【Onedrive】架向星空之桥 星空へ架かる桥 完整汉化(4.3GB) 【颜艺社】【Onedrive】寄宿之恋 かりぐらし恋爱 完整汉化+全CG(2.7GB) 【八月社】【Onedrive】秽翼的尤斯蒂娅 秽翼のユースティア 完整汉化(4.7GB) 【橘子社妈妈累】【Onedrive】回家之前的棉花糖 お家に帰るまでがましまろです 完整汉化+全CG(5.8GB) 【SAGA PLANETS】【Onedrive】花之天使的夏日恋歌 フローラル・フローラブ 完整汉化+全CG(3.7GB) 【音符社】【Onedrive】花与乙女的祝福+花与乙女的祝福 皇家花束 完整汉化(共3.9GB) 【2022.06更新】【Onedrive】最全!花吻在上/亲吻那片花瓣 その花びらにくちづけを 1~20本作+3番外共23作 完整汉化(约10.5GB) 【Onedrive】花色温泉乡/花色七芒星 花色ヘプタグラム 完整汉化(3.6GB) 【CRYSTALIA】红月摇曳的恋之星火SS 与旭同往~来自盛夏的某日~ 旭とワンルーム ~とある夏の一日~ 完整汉化+全CG (550MB) 【CRYSTALIA】红月摇曳的恋之星火SS 与红叶同住 ~来自盛夏的某日~ 紅葉とワンルーム ~とある夏の一日~ 完整汉化+全CG (580MB) 【CRYSTALIA】红月摇曳的恋之星火 紅月ゆれる恋あかり 完整汉化+全CG (2.5GB) 【Onedrive】FD:景之海的艾佩莉亚 ~卡萨布兰卡的骑士~ 景の海のアペイリア ~カサブランカの騎士~ 完整汉化+全CG(2.3GB) 【Onedrive】景之海的艾佩莉娅/海景的艾佩利雅 景の海のアペイリア 完整汉化+全CG(3.0GB) 【柚子社】【Onedrive】管乐恋曲!~The bonds of melody~ ぶらばん! ~The bonds of melody~ 完整汉化(3.0GB) 【Onedrive】【妹抱FD】哥哥,早上起床之前都要抱紧我哦!晚上睡觉之前学更多Java吧!完整汉化+全CG(4.4GB) 【Onedrive】哥哥,早上起床之前都要抱紧我哦!(妹抱)お兄ちゃん、朝までずっとギュってして!完整汉化+全CG(7.0GB) 【SLG】夏日狂想曲:乡间的难忘回忆 【拉环社】【Onedrive】在这苍穹展翅/在这苍穹之中展开双翼 この大空に、翼をひろげてIf My Heart Had Wings 完整汉化(4.3GB) 【拉环社】【Onedrive】在这苍穹展翅-飞行日志- If My Heart Had Wings -Flight Diary- この大空に、翼をひろげて FLIGHT DIARY 完整汉化(3.0GB)
【SLG】夏日狂想曲:乡间的难忘回忆【海豹社】【Onedrive】爱之钥系列 爱之钥田园夏日 アイカギ~アフターデイズ~ 完整汉化+全CG(1.4GB)【拉环社】【Onedrive】仰望夜空的星辰Fine Days/抬头看看吧,看那天上的繁星Fine Days(FD)完整汉化+全CG(4.9GB)【CRYSTALIA】红月摇曳的恋之星火 紅月ゆれる恋あかり 完整汉化+全CG (2.5GB)【柚子社】【Onedrive】管乐恋曲!~The bonds of melody~ ぶらばん! ~The bonds of melody~ 完整汉化(3.0GB)【Onedrive】哥哥,早上起床之前都要抱紧我哦!(妹抱)お兄ちゃん、朝までずっとギュってして!完整汉化+全CG(7.0GB)【Onedrive】景之海的艾佩莉娅/海景的艾佩利雅 景の海のアペイリア 完整汉化+全CG(3.0GB)【Onedrive】FD:景之海的艾佩莉亚 ~卡萨布兰卡的骑士~ 景の海のアペイリア ~カサブランカの騎士~ 完整汉化+全CG(2.3GB)【CRYSTALIA】红月摇曳的恋之星火SS 与红叶同住 ~来自盛夏的某日~ 紅葉とワンルーム ~とある夏の一日~ 完整汉化+全CG (580MB)【CRYSTALIA】红月摇曳的恋之星火SS 与旭同往~来自盛夏的某日~ 旭とワンルーム ~とある夏の一日~ 完整汉化+全CG (550MB)【Onedrive】花色温泉乡/花色七芒星 花色ヘプタグラム 完整汉化(3.6GB)【2022.06更新】【Onedrive】最全!花吻在上/亲吻那片花瓣 その花びらにくちづけを 1~20本作+3番外共23作 完整汉化(约10.5GB)【音符社】【Onedrive】花与乙女的祝福+花与乙女的祝福 皇家花束 完整汉化(共3.9GB)【SAGA PLANETS】【Onedrive】花之天使的夏日恋歌 フローラル・フローラブ 完整汉化+全CG(3.7GB)【橘子社妈妈累】【Onedrive】回家之前的棉花糖 お家に帰るまでがましまろです 完整汉化+全CG(5.8GB)【八月社】【Onedrive】秽翼的尤斯蒂娅 秽翼のユースティア 完整汉化(4.7GB)【颜艺社】【Onedrive】寄宿之恋 かりぐらし恋爱 完整汉化+全CG(2.7GB)【Onedrive】架向星空之桥 星空へ架かる桥 完整汉化(4.3GB)【Onedrive】架向星空之桥AA 架向星空之桥FAN DISC 星空へ架かる桥AA 完整汉化(3.6GB)国产动画《京剧猫》,被运营耽搁的好动画,哀其不幸怒其不争!【Alcot】【Onedrive】将军大人芳华正茂/将军大人风华正茂 将军様はお年顷 完整汉化+全CG(4.20GB)【Alcot】【Onedrive】FD:将军大人芳华正茂 Fandisc 将軍様はお年頃 ふぁんでぃすく -御三家だヨ!全員集合- 完整汉化+全CG(3.0GB)【Onedrive】娇蛮任性HIGHSPEC ワガママハイスペック 完整汉化(7.2GB)【SAGA PLANETS】【Onedrive】金辉恋曲四重奏/金色Loveriche 金色ラブリッチェ 完整汉化+全CG(5.6GB)【SAGA PLANETS】【Onedrive】FD:金色loveriche-金色时光- 金色ラブリッチェ -Golden Time- 完整汉化+全CG(5.5GB)【拉环社】【Onedrive】仰望夜空的星辰/抬头看看吧,看那天上的繁星(本作) 见上げてごらん、夜空の星を 完整汉化+全CG(6.5GB)【漩涡社】鲸神的提亚斯提拉/鲸神的Tearstilla 鯨神のティアスティラ 完整汉化+全CG(3.2GB)【拉环社】【Onedrive】仰望夜空的星辰IF/抬头看看吧,看那天上的繁星IF -Interstellar Focus-(FD)完整汉化+全CG(2.8GB)【雪碧社Sprite】【Onedrive】苍之彼方的四重奏EXTRA2 DL Edition 蒼の彼方のフォーリズム EXTRA2 生肉+全CG(3.5GB)【Onedrive】爱因斯坦携爱敬上APOLLOCRISIS アインシュタインより愛を込めて APOLLOCRISIS 汉化本体+全CG(2.3GB)
【YUZUSOFT】【百度云】天神乱漫 (LUCKY or UNLUCKY!?) 完整汉化硬盘版【7.5G】 【实用!】WPS政府版下载!所有功能全解锁!!! 使用虚拟信用卡VISA外币卡白嫖AWS一年免费云服务器 【HARUKAZE】【百度云】野良与皇女与流浪猫之心-第一部 完整精翻汉化版+全CG存档【3G】 Python-Django 从零开始安装搭建Django环境(详细图文) 国产动画《京剧猫》,被运营耽搁的好动画,哀其不幸怒其不争! 【明日方舟解包】【spine】夕 贴图立绘+动态骨架文件 【Onedrive】9-nine系列之 9-nine-天色天歌天籁音(2.8 GB) Django—使用Django Cache缓存提升网站访问速度 html+css实现响应式卡片悬停效果 如何使用Nginx为 Django 服务配置负载均衡 【拉环社】【Onedrive】在这苍穹展翅/在这苍穹之中展开双翼 この大空に、翼をひろげてIf My Heart Had Wings 完整汉化(4.3GB) 【Onedrive】架向星空之桥AA 架向星空之桥FAN DISC 星空へ架かる桥AA 完整汉化(3.6GB) 【CRYSTALiA】【Onedrive/百度云】牵绊闪耀的恋之伊吕波-绊きらめく恋いろは(4.0G) 记录长达10天的DDoS攻击-从攻防到跑路,做网站的难谁能懂? VB实现强制关闭360安全卫士 在html文档中嵌入css的三种常用方式 Django—集成富文本编辑器Summernote教程 用Netron读取并查看ONNX网络结构模型 栞那 使用虚拟信用卡VISA外币卡白嫖Azure两台一年云服务器以及200美元使用额度 如何将Python文件打包为EXE??? (.py转.exe) 【Onedrive】9-nine系列之 9-nine-新章(2.5 GB) 这样也许能更直观地理解HTTPS为什么安全 HTML页面嵌入视频与JS控制切换视频示例详解 用VB实现迅雷地址解密 【Onedrive】异想魅惑 きまぐれテンプテーション (2.0 GB) How to ask questions?提问的智慧,别像弱智一样提问 Zabbix Web页面报错:Received empty response from Zabbix Agent at [xxx.xxx.xxx.xxx]. Assuming that agent dropped connection because of access permission. Django—数据导出工具django-import-export使用教程

COPYRIGHT © 2022 Rosmontis&迷迭香的博客&鹤望兰分部. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang