[PYTHON] Machen wir eine nervenschwächende Anwendung mit Vue.js und Django-Rest-Framework [Teil 6] ~ Benutzerauthentifizierung 2 ~

<< Teil 5

Login implementiert

Anmeldebildschirm erstellen

Login.vue


<template>
  <v-form>
    <v-container>
      <v-row>
        <v-col cols="12">
          <v-text-field
            v-model="username"
            label="Username"
            outlined
          ></v-text-field>
        </v-col>
      </v-row>

      <v-row>
        <v-col cols="12">
          <v-text-field
            v-model="password"
            outlined
            label="Password"
            style="min-height: 96px"
            type="password"
          >
          </v-text-field>
        </v-col>
      </v-row>

      <div class="text-right">
        <v-btn depressed large color="primary">Einloggen</v-btn>
      </div>
    </v-container>
  </v-form>
</template>

<script>
export default {
  name: 'Login',
  data: function () {
    return {
      username: null,
      password: null
    }
  },
  mounted () {
    //
  }
}
</script>

Ändern Sie router / index.ts

router/index.ts


import Vue from 'vue'
import Router from 'vue-router'
import PlayScreen from '@/views/PlayScreen.vue'
import Login from '@/views/Login.vue'

Vue.use(Router)

export default new Router({
  mode:'history',
  routes: [
    {
      path: '/',
      redirect: 'login'
    },
    {
      path: '/login',
      name: 'login',
      component: Login
    },
    {
      path: '/playscreen',
      name: 'playscreen',
      component: PlayScreen
    },
  ]
})

Wenn Sie "npm run dev" ausführen, wird zunächst der erstellte Anmeldebildschirm angezeigt.

image.png

vuex installieren

npm install vuex --save

Installieren Sie Axios

axios ist ein "Promise-basierter HTTP-Client" (von offiziell).

npm install axios --save

Bereiten Sie eine allgemeine Funktion zum Auslösen von Get- und Post-Anfragen mit Axios vor

Bereiten Sie einen "api" -Ordner direkt unter "src" vor und erstellen Sie common.ts direkt darunter, um allgemeine Funktionen für Axios vorzubereiten.

concentratio #Projektstammverzeichnis
├── config
│   ├── ...
│
├── frontend
│   ├── ...
│   ├── ..
│   ├── .
│   └── src
│         └──api #Erstellen
│             └──common.ts #Erstellen
└── manage.py

src/api/common.ts


import axios from "axios";

const baseRequest = axios.create({
  baseURL: "http://localhost:8000",
  headers: {
      "Content-Type": "application/json",
  }
});

/**
 *GET Anfrage
 * @param url URL
 */
function get(url) {
  return baseRequest.get(url);
}

/**
 *POST-Anfrage
 * @param url URL
 */
function post(url, payload) {
  return baseRequest.post(url, payload);
}

export default {
    get,
    post
};

Bereiten Sie das Vuex-Modul für die Authentifizierung vor

Ich dachte, dass das Verwalten mit einem einzigen Getter oder Aktionen nur den Quellcode anschwellen lassen würde, also versuchte ich, ihn für jede Funktion in Module zu unterteilen, aber ich war ungefähr einen halben Tag lang süchtig danach.
concentratio #Projektstammverzeichnis
├── config
│   ├── ...
│
├── frontend
│   ├── ...
│   ├── ..
│   ├── .
│   └── src
│         └──store #Erstellen
│             └──authenticates #Erstellen
│                 ├──actions.ts #Erstellen
│                 └──index.ts.ts #Erstellen
│                 └──mutations.ts #Erstellen
└── manage.py

store/authenticates/actions.ts


import commonAxios from "../../api/common";

export default {
  LOGIN: function({ commit }, payload) {
    return new Promise((success, error) => {
      commonAxios.post("/api-token-auth/", payload).then(
        response => {
          //Verarbeitung auf Erfolg
          commit("SET_TOKEN", response.data.token); // mutations.ts SET_Übergeben Sie das Token an die TOKEN-Funktion
          commonAxios.baseRequest.defaults.headers.common['Authorization'] = `JWT ${response.data.token}`;
          success();
        }
      );
    });
  }
}

Wenn Sie vergessen, am Ende der obigen URL "/ (Schrägstrich)" hinzuzufügen, wird dies von CORS abgelehnt und es tritt ein Fehler auf. Ich habe lange gebraucht, um das zu bemerken, und ich war ungefähr eine Stunde lang süchtig danach ...    

store/authenticates/index.ts


import actions from './actions';

export const state = {};

export default {
  namespaced: true, //Stellen Sie sicher, dass es ein- oder ausgeschaltet ist. Beim Lesen mit den mapActions von vue wird eine Fehlermeldung angezeigt.
  state,
  actions,
  mutations
};

store/authenticates/mutations.ts


export default {
  SET_TOKEN: function(state, token) {
    state.token = token
  }
};

Erstellen Sie index.ts direkt unter src / store

store/index.ts


import Vue from "vue";
import Vuex from "vuex";
import authModules from "./authenticates"; //Laden Sie die Module unter Authentifizierungen mit dem Namen authModules

Vue.use(Vuex);

export default new Vuex.Store({
  modules: {
    authModules: authModules,
  }
});

Behoben src / main.ts

src/main.ts


.
..
...
import store from "./store"; //hinzufügen
...
..
.
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
  vuetify: new Vuetify(),
  store //hinzufügen
});

Login.vue behoben

Login.vue


<template>
  <v-form>
    <v-container>
      ...
      ..
      .

      <div class="text-right">
        <v-btn depressed large color="primary" @click="login">
Einloggen
        </v-btn>
      </div>
    </v-container>
  </v-form>
</template>

<script>
import { mapActions } from "vuex";

export default {
  name: "Login",
  data: function() {
    return {
      username: null,
      password: null
    };
  },
  methods: {
    ...mapActions("authModules", ["LOGIN"]), //Modulierte Aktion.Lesen Sie die LOGIN-Funktion von ts
    login: function() {
      const data = {
        username: this.username,
        password: this.password
      };
      this.LOGIN(data).then(res => {
        console.log(res);
      });
    }
  },
  mounted() {
    //
  }
};
</script>

Überprüfen Sie, ob die Antwort zurückgegeben wird

Nachdem Sie den richtigen Benutzernamen und das richtige Passwort eingegeben haben, drücken Sie die Login-Taste und überprüfen Sie, ob die Antwort zurückgegeben wird.

image.png

Es ist zurück!

Wechseln Sie nach erfolgreicher Authentifizierung zur obersten Seite.

Ersetzen Sie einfach console.log (res); in Login.vue durch this. $ Router.push (" / playcreen ");.

das ist alles

Ich konnte vom Anmeldebildschirm aus erfolgreich zur obersten Seite wechseln.

Recommended Posts

Machen wir eine nervenschwächende Anwendung mit Vue.js und Django-Rest-Framework [Teil 6] ~ Benutzerauthentifizierung 2 ~
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 5] ~ Benutzerauthentifizierung ~ eine nervenschwächende Anwendung erstellen
Machen wir eine nervenschwächende App mit Vue.js und Django-Rest-Framework [Teil 3] ~ Implementierung von Nervenschwäche ~
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 2] ~ Vue setup ~ eine nervenschwächende App erstellen
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 1] ~ Django-Setup ~ eine nervenschwächende App erstellen
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 4] eine nervenschwächende Anwendung machen ~ MySQL-Konstruktion und DB-Migration mit Docker ~
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 1 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 2 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Lassen Sie uns eine Mac-App mit Tkinter und py2app erstellen
Lassen Sie uns mit Python einen Web-Socket-Client erstellen. (Zugriffstoken-Authentifizierung)
Lassen Sie uns eine GUI mit Python erstellen.
Machen wir einen Blockbruch mit wxPython
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Lassen Sie uns mit Python ein Shiritori-Spiel machen
Lassen Sie uns mit Python langsam sprechen
Lassen Sie uns mit PLY 1 eine einfache Sprache erstellen
Erstellen Sie ein Webframework mit Python! (1)
Machen wir mit Pylearn 2 eine dreiäugige KI
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Lassen Sie uns mit Flask eine Webanwendung zur Konvertierung von A nach B erstellen! Von Grund auf neu ...
Versuchen Sie, eine Webanwendung mit Vue.js und Django (Mac Edition) zu erstellen - (1) Umgebungskonstruktion, Anwendungserstellung
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
Lassen Sie uns eine App erstellen, die ähnliche Bilder mit Python und Flask Part1 durchsuchen kann
Lassen Sie uns eine App erstellen, die ähnliche Bilder mit Python und Flask Part2 durchsuchen kann
Lass uns ein Makefile machen und es bauen (super Anfänger)
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
Wie man ein Schießspiel mit toio macht (Teil 1)
Lassen Sie uns das Abhängigkeitsmanagement mit pip etwas einfacher machen
Versuchen Sie, mit Rhinoceros / Grasshopper / GHPython ein sphärisches Gitter zu erstellen
[Super einfach] Machen wir einen LINE BOT mit Python.
Erstellen Sie mit Flask-AppBuilder ganz einfach Authentifizierung, Benutzerverwaltung und mehrsprachige Systeme
Erstellen Sie mit QGIS Part 2 ein tky2jgd-Plug-In ohne praktische Anwendbarkeit
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
Lassen Sie uns ein PRML-Diagramm mit Python, Numpy und matplotlib erstellen.
Erstellen eines tky2jgd-Plug-Ins ohne praktische Anwendbarkeit mit QGIS Teil 1
Erstelle ein 2D-Rollenspiel mit Ren'Py (3) -Items and Tool Shop
Lassen Sie uns ein Diagramm erstellen, auf das mit IPython geklickt werden kann
Machen Sie ein BLE-Thermometer und ermitteln Sie die Temperatur mit Pythonista3