zoukankan      html  css  js  c++  java
  • 前后端登录

    流式布局

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>流式布局</title>
        <style>
        .box {
                 800px;
                height: 200px;
                background-color: orange;
    
                /*页面宽度缩放,盒子始终居中*/
                margin-left: auto;
                margin-right: auto;
    
                /* 80%;*/
    
                /*vw: view width | vh: view height*/
                /* 80vw;*/
                /* 80vh;*/
    
            }
            .sup {
                font-size: 40px;
            }
            .sub {
                /*font-size: inherit;*/
                /*font-size: 1.5em;*/
                /* 5em;*/
                font-size: 2rem;
            }
            html {
                font-size: 30px;
            }
        </style>
    </head>
    <body>
        <div class="box"></div>
        <div class="sup">
            <div class="sub">字</div>
        </div>
    </body>
    </html>

    js函数

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>js函数</title>
    </head>
    <body>
        <h1>js函数</h1>
    </body>
    <script>
        function fn1(a, b, c, d) {
        console.log(a, b, c, d);
        console.log('fn1 run');
        }
        fn1(1, 2, 3);
    
        let fn2 = function (...args) {
        console.log(args);
        console.log(args[0]);
        console.log('fn2 run');
        };
        fn2(1, 2, 3, 4);
    
        (function () {
        console.log('fn3 run');
        })();
    
        let fn4 = () => {
            console.log('fn4 run');
        };
        fn4();
    
            // 有参有反
        let fn5 = (a, b) => {
            console.log(a, b);
            return a + b;
        };
        let res = fn5(1, 2);
        console.log(res);
    
         // 箭头函数函数体如果只有返回值,可以简写
        let fn6 = (a, b) => a + b;
        res = fn6(10, 20);
        console.log(res);
    
        // 当形参只有一个,可以省略()
        let fn7 = a => a * 2;
        res = fn7(10);
        console.log(res);
    
        // 当形参为空的简写方式
        let fn8 = () => 200;
        res = fn8();
        console.log(res);
    </script>
    </html>

    面向对象

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>面向对象js</title>
    </head>
    <body>
    <h1>面向对象js</h1>
    </body>
    <script>
        class Student {
            constructor(name) {
                console.log('构造器调用了');
                this.name = name;
            }
            study() {
                console.log(`${this.name}在学习`)
            }
        }
        let s1 = new Student('Bob');
        console.log(s1.name);
        s1.study();
    
        function Teacher(name) {
            this.name = name;
            this.teach = function () {
                console.log(`${this.name}在教学`)
            };
            this.test = () => {
                console.log(`${this.name}-test`)
            }
        }
    
        let t1 = new Teacher('Tom');
        console.log(t1.name);
        t1.teach();
        t1.test();
    
            // 可以理解为类属性,所有对象共有
        Teacher.prototype.age = 10;
        Teacher.prototype.sleep = function () {
             console.log(`${this.name}在睡觉`)
        };
        console.log(t1.age);
        t1.sleep();
        let t2 = new Teacher('Jerry');
        console.log(t2.age);
        t2.sleep();
    
        // Vue.prototype.abc = 123;
        // let localTag = {};
        // Vue.component('',{});
        // new Vue({
        //     components: {
        //        localTag
        //     }
        // });
    
        // function 与 箭头函数有本质区别
        let h1 = document.querySelector('h1');
        h1.onclick = function () {
            alert(this.innerText);
            console.log(this);
        };
    
        h1.onclick = () => {
            alert(this.innerText);
            console.log(this);
        }
    </script>
    </html>

     前后端登录

    v-proj   前端

    App.vue

    <template>
      <div id="app">
    
        <router-view/>
      </div>
    </template>
    
    <style>
      body,ul, h1{
        padding: 0;
        margin: 0;
        list-style: none;
      }
    </style>

    views/Login.vue

    cnpm install axios

    <template>
        <div class="login">
            <h1>登录页面</h1>
            <hr>
            <form action="">
                <p>
                    <label for="username">账号:</label>
                    <input type="text" id="username" name="username" v-model="username">
                </p>
                <p>
                    <label for="password">密码:</label>
                    <input type="password" id="password" name="password" v-model="password">
                </p>
                <button type="button" @click="login">登录</button>
            </form>
        </div>
    </template>
    
    <script>
        export default {
            name: "Login.vue",
            data () {
                return {
                    username: '',
                    password: '',
                }
            },
            beforeCreate() {
                // 查看localStorage中是否存在token(是否登录),登录跳转主页
                let token = localStorage.token;
                if (token) {
                    this.$router.push('/')
                }
            },
            methods: {
                login () {
                    let username = this.username;
                    let password = this.password;
                    // console.log(username);
                    // console.log(password);
                    if (!(username && password)) {
                        alert('信息有误');
                        return false
                    }
                    // console.log(username);
                    this.$axios({
                        url: 'http://127.0.0.1:8001/login/',
                        method: 'post',
                        params: {
                            username,
                            password
                        },
                    }).then(response => {
                        // console.log('hi');
                        // console.log(response);
                        // console.log(response.data.status);
                        let status = response.data.status;
                        if (status === 0) {
                            alert('登录成功');
                            // 记录登录状态
                            localStorage.token = response.data.token;
                            localStorage.username = response.data.username;
                            // 跳转主页
                            this.$router.push('/');
                        } else {
                            alert('登录失败')
                        }
                    }).catch(() => {
                        alert('登录异常')
                    });
    
                    // 清空输入框
                    this.username = '';
                    this.password = '';
                }
            }
        }
    </script>
    
    <style scoped>
        .login {
            text-align: center;
        }
        button {
            /*display: block;*/
             220px;
        }
    </style>

    views/Home.vue

    <template>
        <div class="home">
            <div class="header">
                <h1>主页</h1>
                <span v-if="token">
                <b>{{ username }}</b>
                |
                <b @click="logout">注销</b>
                </span>
                    <span v-else>
                    <b>请登录</b>
                </span>
            </div>
            <hr>
            <div class="ctx">
                <p>
                    <button @click="changeInfo('/phone/')">phone</button>
                    <button @click="changeInfo('/tv/')">tv</button>
                </p>
                <div v-for="info in infos" :key="info.url">
                    <img width="200" :src="info.url" alt="">
                    <p>{{ info.title }}</p>
                </div>
            </div>
    
        </div>
    </template>
    
    <script>
        export default {
            name: 'home',
            data() {
                return {
                    token: localStorage.token ? localStorage.token : '',
                    username: localStorage.username ? localStorage.username : '',
                    infos: [],
                }
            },
            components: {},
            beforeCreate() {
                // 查看localStorage中是否存在token(是否登录),未登录跳转登录页面
                this.$options.methods._checkToken();
            },
            methods: {
                logout() {
                    // 丢弃登录状态,就可以完成注销(不需要后台参与)
                    localStorage.clear();
                    this.token = '';
                    this.username = '';
                },
                _checkToken() {
                    let token = localStorage.token;
                    if (!token) {
                        this.$router.push('/login')
                    }
                },
                changeInfo(path) {
                    this.$axios({
                        url: `http://127.0.0.1:8001${path}`,
                        method: 'get',
                        headers: {
                            authorization: this.token
                        }
                    }).then(response => {
                        console.log(response.data);
                        this.infos = response.data.results;
                    })
                }
            },
            watch: {
                token() {
                    this._checkToken();
                }
            },
            created() {
                this.$axios({
                    url: 'http://127.0.0.1:8001/phone/',
                    method: 'get',
                    headers: {
                        authorization: this.token
                    }
                }).then(response => {
                    console.log(response.data);
                    this.infos = response.data.results;
                })
            }
        }
    </script>
    <style scoped>
        h1 {
            float: left;
        }
        span {
            float: right;
        }
        .header:after {
            content: '';
            display: block;
            clear: both;
        }
        .header {
            line-height: 80px;
        }
    
    </style>

    router/index.js

    import Vue from 'vue'
    import VueRouter from 'vue-router'
    import Home from '../views/Home.vue'
    import Login from '../views/Login.vue'
    
    Vue.use(VueRouter);
    
    const routes = [
      {
        path: '/',
        name: 'home',
        component: Home
      },
        {
        path: '/home',
        redirect: '/'   //路由重定向
      },
        {
        path: '/login',
        name: 'login',
        component: Login
      },
    ];
    
    const router = new VueRouter({
      mode: 'history',
      base: process.env.BASE_URL,
      routes
    });
    
    export default router

    main.js

    cnpm install jquery

    cnpm install bootstrap@3

    import Vue from 'vue'
    import App from './App.vue'
    import router from './router'
    import store from './store'
    
    Vue.config.productionTip = false;
    
    import axios from 'axios'
    Vue.prototype.$axios = axios;
    
    // 配置bootstrap环境
    import 'bootstrap'
    import 'bootstrap/dist/css/bootstrap.min.css'
    
    new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount('#app');

    vue.config.js

    const webpack = require("webpack");
    
    module.exports = {
        configureWebpack: {
            plugins: [
                new webpack.ProvidePlugin({
                    $: "jquery",
                    jQuery: "jquery",
                    "window.jQuery": "jquery",
                    Popper: ["popper.js", "default"]
                })
            ]
        }
    };

    dg_proj 后端

    主路由  urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from django.views.static import serve
    from django.conf import settings
    from app import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^login/$', views.login),
        url(r'^tv/$', views.tv),
        url(r'^phone/$', views.phone),
        url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}),
    ]

    app.views.py

    from django.shortcuts import render
    from django.http import JsonResponse
    # Create your views here.
    
    def login(request):
        username = request.GET.get('username')
        password = request.GET.get('password')
        # 规定账号 abc 密码 123
        print(username,password)
        if username == "abc" and password == "123":
            return JsonResponse({
                'status': 0,
                'msg': '登录成功',
                'token': 'token.abc.123',
                'username': username,
            })
        return JsonResponse({
            'status': 1,
            'msg': '登录失败',
        })
    
    def tv(request):
        token = request.META.get('HTTP_AUTHORIZATION')
        if not token:
            return JsonResponse({
                'status': 1,
                'msg': '没有权限',
            },json_dumps_params={'ensure_ascii': False})
        return JsonResponse({
            'status': 0,
            'msg': 'ok',
            'results': [
                {
                    'url': 'http://127.0.0.1:8001/media/img/003.jpg',
                    'title': '电视一号'
                },
                {
                    'url': 'http://127.0.0.1:8001/media/img/004.jpg',
                    'title': '电视二号'
                }
            ]
        },json_dumps_params={'ensure_ascii': False})
    
    def phone(request):
        token = request.META.get('HTTP_AUTHORIZATION')
        if not token:
            return JsonResponse({
                'status': 1,
                'msg': '没有权限'
            }, json_dumps_params={'ensure_ascii': False})
        return JsonResponse({
            'status': 0,
            'msg': 'ok',
            'results': [
                {
                    'url': 'http://127.0.0.1:8001/media/img/001.jpg',
                    'title': '手机一号'
                },
                {
                    'url': 'http://127.0.0.1:8001/media/img/002.jpg',
                    'title': '手机二号'
                }
            ]
        }, json_dumps_params={'ensure_ascii': False})

    dg_proj/settings.py

    INSTALLED_APPS = [
        'corsheaders'
    ]
    
    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',
    ]
    
    CORS_ORIGIN_ALLOW_ALL = True
    
    LANGUAGE_CODE = 'zh-hans'
    
    TIME_ZONE = 'Asia/Shanghai'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = False
    
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

    app/apps.py

    from django.apps import AppConfig
    class AppConfig(AppConfig):
        name = 'app'
    dayehui
  • 相关阅读:
    javascript封装自定义滚动条方法,可自定义四个边框滚动条
    前端页面优化:javascript图片延迟加载
    VPS用LNMP安装WordPress
    结缘PDO
    Laravel踩坑笔记——illuminate/html被抛弃
    Android定时器实现方法[转]
    关于安装Android Studio的一些问题的解决方法
    nginx 多站点配置方法
    PHP5.6.x的新鲜事
    ThinkPHP学习手记——环境搭建
  • 原文地址:https://www.cnblogs.com/zrh-960906/p/11784896.html
Copyright © 2011-2022 走看看