├── .editorconfig ├── .gitignore ├── assets ├── js │ ├── auth.js │ ├── components │ │ ├── alert.vue │ │ └── pages │ │ │ ├── bar.vue │ │ │ ├── foo.vue │ │ │ ├── home.vue │ │ │ ├── login.vue │ │ │ └── user.vue │ ├── drf_vue.js │ ├── router.js │ └── utils.js └── sass │ ├── _main.scss │ ├── _transitions.scss │ ├── _variables.scss │ └── drf_vue.scss ├── bower.json ├── drf_vue ├── __init__.py ├── settings.py ├── templatetags │ ├── __init__.py │ └── elixir.py ├── urls.py ├── views.py └── wsgi.py ├── gulpfile.js ├── manage.py ├── package.json ├── requirements.txt ├── static ├── build │ ├── css │ │ └── drf_vue-1ec899b561.css │ ├── js │ │ └── drf_vue-c210969f9e.js │ └── rev-manifest.json └── font │ ├── font-awesome │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ └── fontawesome-webfont.woff2 │ ├── material-design-icons │ ├── Material-Design-Icons.eot │ ├── Material-Design-Icons.svg │ ├── Material-Design-Icons.ttf │ ├── Material-Design-Icons.woff │ └── Material-Design-Icons.woff2 │ └── roboto │ ├── Roboto-Bold.eot │ ├── Roboto-Bold.ttf │ ├── Roboto-Bold.woff │ ├── Roboto-Bold.woff2 │ ├── Roboto-Light.eot │ ├── Roboto-Light.ttf │ ├── Roboto-Light.woff │ ├── Roboto-Light.woff2 │ ├── Roboto-Medium.eot │ ├── Roboto-Medium.ttf │ ├── Roboto-Medium.woff │ ├── Roboto-Medium.woff2 │ ├── Roboto-Regular.eot │ ├── Roboto-Regular.ttf │ ├── Roboto-Regular.woff │ ├── Roboto-Regular.woff2 │ ├── Roboto-Thin.eot │ ├── Roboto-Thin.ttf │ ├── Roboto-Thin.woff │ └── Roboto-Thin.woff2 └── templates └── index.html /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | end_of_line = lf 7 | charset = utf-8 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | __pycache__ 3 | bower_components 4 | node_modules 5 | db.sqlite3 6 | static/css 7 | static/js 8 | -------------------------------------------------------------------------------- /assets/js/auth.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Utils from './utils' 3 | 4 | // URL and endpoint constants 5 | const API_URL = 'http://127.0.0.1/api/' 6 | const LOGIN_URL = API_URL + 'auth/token/' 7 | const SIGNUP_URL = API_URL + 'account/signup' 8 | 9 | var Auth = { 10 | user: {}, 11 | 12 | login(context, creds, redirect) { 13 | context.$http.post(LOGIN_URL, creds, (data) => { 14 | localStorage.setItem('token', data.token) 15 | 16 | this.user.authenticated = true 17 | this.setUserDataFromToken(data.token) 18 | 19 | context.$root.alert('success', "Welcome back, " + this.user.username + "!") 20 | 21 | if (redirect) { 22 | context.$route.router.go(redirect) 23 | } 24 | }).error((err) => { 25 | context.errors = err 26 | }) 27 | }, 28 | 29 | signup(context, creds, redirect) { 30 | context.$http.post(SIGNUP_URL, creds, (data) => { 31 | localStorage.setItem('token', data.token) 32 | 33 | this.user.authenticated = true 34 | this.setUserDataFromToken(data.token) 35 | 36 | if (redirect) { 37 | context.$route.router.go(redirect) 38 | } 39 | }).error((err) => { 40 | context.errors = err 41 | }) 42 | }, 43 | 44 | logout(context) { 45 | localStorage.removeItem('token') 46 | this.user.authenticated = false 47 | this.resetUserData() 48 | context.alert('success', "You've been logged out.") 49 | }, 50 | 51 | check() { 52 | var jwt = localStorage.getItem('token') 53 | if (jwt) { 54 | this.user.authenticated = true 55 | this.setUserDataFromToken(jwt) 56 | } else { 57 | this.user.authenticated = false 58 | this.resetUserData() 59 | } 60 | }, 61 | 62 | setUserDataFromToken(token) { 63 | var data = Utils.jwt_decode(token) 64 | this.user.id = data.user_id 65 | this.user.username = data.username 66 | }, 67 | 68 | resetUserData() { 69 | this.user.id = 0 70 | this.user.username = 'guest' 71 | }, 72 | 73 | getAuthHeader() { 74 | return { 75 | 'Authorization': 'Bearer ' + localStorage.getItem('token') 76 | } 77 | } 78 | } 79 | 80 | Auth.check() 81 | 82 | module.exports = Auth 83 | -------------------------------------------------------------------------------- /assets/js/components/alert.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 25 | -------------------------------------------------------------------------------- /assets/js/components/pages/bar.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /assets/js/components/pages/foo.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /assets/js/components/pages/home.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /assets/js/components/pages/login.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 56 | -------------------------------------------------------------------------------- /assets/js/components/pages/user.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 19 | -------------------------------------------------------------------------------- /assets/js/drf_vue.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueResource from 'vue-resource' 3 | import Router from './router' 4 | import Auth from './auth' 5 | import AlertComponent from './components/alert.vue' 6 | 7 | // Plug in the plugins 8 | Vue.use(VueResource) 9 | 10 | // Define a root component to represent the app 11 | var App = Vue.extend({ 12 | data() { 13 | return { 14 | user: { 15 | authenticated: false, 16 | id: 0, 17 | username: 'guest' 18 | }, 19 | alerts: [] 20 | } 21 | }, 22 | components: { 23 | 'alert': AlertComponent 24 | }, 25 | methods: { 26 | alert(type, message) { 27 | this.alerts.push({type: type, message: message}) 28 | }, 29 | logout() { 30 | Auth.logout(this) 31 | } 32 | }, 33 | ready() { 34 | this.user = Auth.user 35 | } 36 | }) 37 | 38 | // Start the app 39 | Router.start(App, '#app') 40 | -------------------------------------------------------------------------------- /assets/js/router.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | import HomeComponent from './components/pages/home.vue' 4 | import BarComponent from './components/pages/bar.vue' 5 | import FooComponent from './components/pages/foo.vue' 6 | import UserComponent from './components/pages/user.vue' 7 | import LoginComponent from './components/pages/login.vue' 8 | import Auth from './auth' 9 | 10 | Vue.use(VueRouter) 11 | 12 | // Create a router instance 13 | var Router = new VueRouter({ 14 | history: true, 15 | linkActiveClass: 'active' 16 | }) 17 | 18 | // Define routes 19 | Router.map({ 20 | '/': { 21 | name: 'home', 22 | component: HomeComponent 23 | }, 24 | '/bar': { 25 | name: 'bar', 26 | component: BarComponent, 27 | auth: true 28 | }, 29 | '/foo': { 30 | name: 'foo', 31 | component: FooComponent 32 | }, 33 | '/account/login': { 34 | name: 'account.login', 35 | component: LoginComponent, 36 | guest: true 37 | }, 38 | '/user/:user_id': { 39 | name: 'user', 40 | component: UserComponent 41 | } 42 | }) 43 | 44 | Router.beforeEach(function (transition) { 45 | if (transition.to.auth && !Auth.user.authenticated) { 46 | transition.redirect('/account/login') 47 | } else if (transition.to.guest && Auth.user.authenticated) { 48 | transition.redirect('/') 49 | } else { 50 | transition.next() 51 | } 52 | }) 53 | 54 | module.exports = Router 55 | -------------------------------------------------------------------------------- /assets/js/utils.js: -------------------------------------------------------------------------------- 1 | import Alert from './components/alert.vue' 2 | 3 | module.exports = { 4 | jwt_decode: function(token) { 5 | return JSON.parse(window.atob(token.split('.')[1])) 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /assets/sass/_main.scss: -------------------------------------------------------------------------------- 1 | body { 2 | background: $background; 3 | 4 | #app { 5 | background: #fff; 6 | 7 | .user-bar { 8 | padding: 15px; 9 | border-bottom: 1px solid color('blue-grey', 'lighten-5'); 10 | } 11 | } 12 | 13 | .pad { 14 | padding: 40px; 15 | } 16 | 17 | .card.alert { 18 | color: #fff; 19 | 20 | &.info { 21 | @extend .light-blue; 22 | } 23 | &.success { 24 | @extend .teal; 25 | } 26 | &.warning { 27 | @extend .orange.darken-3; 28 | } 29 | &.error { 30 | @extend .deep-orange; 31 | } 32 | 33 | .fa-times { 34 | float: right; 35 | font-size: 22px; 36 | color: #fff; 37 | opacity: 0.8; 38 | 39 | &:hover { 40 | cursor: pointer; 41 | opacity: 1.0; 42 | } 43 | } 44 | } 45 | 46 | .no-shadow { 47 | box-shadow: none; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /assets/sass/_transitions.scss: -------------------------------------------------------------------------------- 1 | .fade-transition { 2 | transition: all .5s ease-in-out; 3 | opacity: 1.0; 4 | } 5 | .fade-enter, .fade-leave { 6 | transition: all .5s ease-in-out; 7 | opacity: 0; 8 | } 9 | -------------------------------------------------------------------------------- /assets/sass/_variables.scss: -------------------------------------------------------------------------------- 1 | $background: #f1eeeb; 2 | 3 | // Materialize Fonts 4 | $roboto-font-path: "../../font/roboto/"; 5 | $icons-font-path: "../../font/material-design-icons/"; 6 | 7 | // FontAwesome Fonts 8 | $fa-font-path: "../../font/font-awesome"; 9 | -------------------------------------------------------------------------------- /assets/sass/drf_vue.scss: -------------------------------------------------------------------------------- 1 | @import 'variables'; 2 | @import 'materialize'; 3 | @import 'font-awesome'; 4 | @import 'main'; 5 | @import 'transitions'; 6 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "drf_vue", 3 | "description": "", 4 | "main": "", 5 | "authors": [ 6 | "Rick Mann " 7 | ], 8 | "license": "MIT", 9 | "moduleType": [], 10 | "homepage": "", 11 | "ignore": [ 12 | "**/.*", 13 | "node_modules", 14 | "bower_components", 15 | "test", 16 | "tests" 17 | ], 18 | "dependencies": { 19 | "Materialize": "materialize#^0.97.5", 20 | "font-awesome": "fontawesome#^4.5.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /drf_vue/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/drf_vue/__init__.py -------------------------------------------------------------------------------- /drf_vue/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for drf_vue project. 3 | 4 | Generated by 'django-admin startproject' using Django 1.9.4. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.9/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/1.9/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = 'awpd#p%fva)0*(^+*lvf1(9xuw_47o+ny7!eed97e#y$h9p3t8' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | APPEND_SLASH = False 31 | 32 | 33 | # Application definition 34 | 35 | INSTALLED_APPS = [ 36 | 'django.contrib.admin', 37 | 'django.contrib.auth', 38 | 'django.contrib.contenttypes', 39 | 'django.contrib.sessions', 40 | 'django.contrib.messages', 41 | 'django.contrib.staticfiles', 42 | 43 | 'rest_framework', 44 | 45 | 'drf_vue', 46 | ] 47 | 48 | MIDDLEWARE_CLASSES = [ 49 | 'django.middleware.security.SecurityMiddleware', 50 | 'django.contrib.sessions.middleware.SessionMiddleware', 51 | 'django.middleware.common.CommonMiddleware', 52 | 'django.middleware.csrf.CsrfViewMiddleware', 53 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 54 | 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 55 | 'django.contrib.messages.middleware.MessageMiddleware', 56 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 57 | ] 58 | 59 | ROOT_URLCONF = 'drf_vue.urls' 60 | 61 | TEMPLATES = [ 62 | { 63 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 64 | 'DIRS': [ 65 | 'templates', 66 | ], 67 | 'APP_DIRS': True, 68 | 'OPTIONS': { 69 | 'context_processors': [ 70 | 'django.template.context_processors.debug', 71 | 'django.template.context_processors.request', 72 | 'django.contrib.auth.context_processors.auth', 73 | 'django.contrib.messages.context_processors.messages', 74 | ], 75 | }, 76 | }, 77 | ] 78 | 79 | WSGI_APPLICATION = 'drf_vue.wsgi.application' 80 | 81 | 82 | # Database 83 | # https://docs.djangoproject.com/en/1.9/ref/settings/#databases 84 | 85 | DATABASES = { 86 | 'default': { 87 | 'ENGINE': 'django.db.backends.sqlite3', 88 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 89 | } 90 | } 91 | 92 | 93 | # Password validation 94 | # https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators 95 | 96 | AUTH_PASSWORD_VALIDATORS = [ 97 | { 98 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 99 | }, 100 | { 101 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 102 | }, 103 | { 104 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 105 | }, 106 | { 107 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 108 | }, 109 | ] 110 | 111 | 112 | # Internationalization 113 | # https://docs.djangoproject.com/en/1.9/topics/i18n/ 114 | 115 | LANGUAGE_CODE = 'en-us' 116 | 117 | TIME_ZONE = 'UTC' 118 | 119 | USE_I18N = True 120 | 121 | USE_L10N = True 122 | 123 | USE_TZ = True 124 | 125 | 126 | # Static files (CSS, JavaScript, Images) 127 | # https://docs.djangoproject.com/en/1.9/howto/static-files/ 128 | 129 | STATIC_URL = '/static/' 130 | 131 | STATICFILES_DIRS = ( 132 | os.path.join(BASE_DIR, 'static'), 133 | ) 134 | 135 | # REST Framework 136 | # http://www.django-rest-framework.org/ 137 | 138 | REST_FRAMEWORK = { 139 | 'DEFAULT_PERMISSION_CLASSES': ( 140 | 'rest_framework.permissions.IsAuthenticated', 141 | ), 142 | 'DEFAULT_AUTHENTICATION_CLASSES': ( 143 | 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 144 | ), 145 | } 146 | -------------------------------------------------------------------------------- /drf_vue/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/drf_vue/templatetags/__init__.py -------------------------------------------------------------------------------- /drf_vue/templatetags/elixir.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | from django.conf import settings 3 | import json 4 | 5 | register = template.Library() 6 | 7 | @register.simple_tag 8 | def elixir(file): 9 | with open('static/build/rev-manifest.json') as f: 10 | data = json.load(f) 11 | return settings.STATIC_URL + 'build/' + data.get(file) 12 | -------------------------------------------------------------------------------- /drf_vue/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | from django.conf.urls import url, include 3 | from django.conf.urls.static import static 4 | from django.contrib import admin 5 | from django.contrib.auth.models import User 6 | from rest_framework import routers, serializers, viewsets 7 | from rest_framework_jwt.views import obtain_jwt_token, verify_jwt_token, refresh_jwt_token 8 | from .views import * 9 | 10 | # Serializers define the API representation. 11 | class UserSerializer(serializers.HyperlinkedModelSerializer): 12 | class Meta: 13 | model = User 14 | fields = ('url', 'username', 'email', 'is_staff') 15 | 16 | # ViewSets define the view behavior. 17 | class UserViewSet(viewsets.ModelViewSet): 18 | queryset = User.objects.all() 19 | serializer_class = UserSerializer 20 | 21 | # Routers provide an easy way of automatically determining the URL conf. 22 | router = routers.DefaultRouter() 23 | router.register(r'users', UserViewSet) 24 | 25 | # Wire up our API using automatic URL routing. 26 | urlpatterns = [ 27 | url(r'^admin/', admin.site.urls), 28 | url(r'^api/', include(router.urls)), 29 | url(r'^api/auth/token/', obtain_jwt_token), 30 | url(r'^api/auth/token/verify/', verify_jwt_token), 31 | url(r'^api/auth/token/refresh/', refresh_jwt_token), 32 | url(r'^.*$', IndexView.as_view()) 33 | ] + static(settings.STATIC_URL) 34 | -------------------------------------------------------------------------------- /drf_vue/views.py: -------------------------------------------------------------------------------- 1 | from django.views.generic.base import TemplateView 2 | 3 | 4 | class IndexView(TemplateView): 5 | template_name = 'index.html' 6 | -------------------------------------------------------------------------------- /drf_vue/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for drf_vue project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drf_vue.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | function path(path, source) { 2 | if (typeof(source) === 'undefined') { 3 | path = './bower_components/' + path; 4 | } 5 | if (source == 'assets') { 6 | path = './assets/' + path; 7 | } 8 | return path; 9 | } 10 | 11 | var elixir = require('laravel-elixir'); 12 | require('laravel-elixir-vueify'); 13 | 14 | elixir.config.sourcemaps = false; 15 | elixir.config.assetsPath = 'assets'; 16 | elixir.config.publicPath = 'static'; 17 | 18 | elixir(function(mix) { 19 | mix 20 | // Stylesheets 21 | .sass('drf_vue.scss', 'static/css/', { 22 | includePaths: [ 23 | path('font-awesome/scss'), 24 | path('Materialize/sass') 25 | ] 26 | }) 27 | 28 | // Scripts 29 | .browserify('drf_vue.js', 'static/js/browserified.js') 30 | 31 | // Script merging 32 | .scripts([ 33 | path('jquery/dist/jquery.min.js'), 34 | path('Materialize/dist/js/materialize.min.js'), 35 | 'static/js/browserified.js' 36 | ], 'static/js/drf_vue.js', './') 37 | 38 | // Versioning 39 | .version(['static/js/drf_vue.js', 'static/css/drf_vue.css']); 40 | }); 41 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drf_vue.settings") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "drf_vue", 3 | "version": "1.0.0", 4 | "description": "", 5 | "dependencies": {}, 6 | "devDependencies": { 7 | "babel-core": "^6.7.2", 8 | "babel-plugin-transform-runtime": "^6.6.0", 9 | "babel-preset-react": "^6.5.0", 10 | "babel-runtime": "^5.8.35", 11 | "bower": "^1.7.7", 12 | "gulp": "^3.9.1", 13 | "laravel-elixir": "^5.0.0", 14 | "laravel-elixir-vueify": "^1.0.2", 15 | "vue": "^1.0.17", 16 | "vue-hot-reload-api": "^1.3.2", 17 | "vue-resource": "^0.7.0", 18 | "vue-router": "^0.7.11", 19 | "vueify": "^8.3.6", 20 | "vueify-insert-css": "^1.0.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Django==1.9.4 2 | djangorestframework==3.3.2 3 | djangorestframework-jwt==1.7.2 4 | -------------------------------------------------------------------------------- /static/build/rev-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "css/drf_vue.css": "css/drf_vue-1ec899b561.css", 3 | "js/drf_vue.js": "js/drf_vue-c210969f9e.js" 4 | } -------------------------------------------------------------------------------- /static/font/font-awesome/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/font-awesome/FontAwesome.otf -------------------------------------------------------------------------------- /static/font/font-awesome/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/font-awesome/fontawesome-webfont.eot -------------------------------------------------------------------------------- /static/font/font-awesome/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/font-awesome/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/font/font-awesome/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/font-awesome/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/font/font-awesome/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/font-awesome/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /static/font/material-design-icons/Material-Design-Icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/material-design-icons/Material-Design-Icons.eot -------------------------------------------------------------------------------- /static/font/material-design-icons/Material-Design-Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/material-design-icons/Material-Design-Icons.ttf -------------------------------------------------------------------------------- /static/font/material-design-icons/Material-Design-Icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/material-design-icons/Material-Design-Icons.woff -------------------------------------------------------------------------------- /static/font/material-design-icons/Material-Design-Icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/material-design-icons/Material-Design-Icons.woff2 -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Bold.eot -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Bold.ttf -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Bold.woff -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Bold.woff2 -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Light.eot -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Light.ttf -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Light.woff -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Light.woff2 -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Medium.eot -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Medium.ttf -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Medium.woff -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Medium.woff2 -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Regular.eot -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Regular.ttf -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Regular.woff -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Regular.woff2 -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Thin.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Thin.eot -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Thin.ttf -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Thin.woff -------------------------------------------------------------------------------- /static/font/roboto/Roboto-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Riari/drf-vue/4329331341dedeaf66f9a5e8f843e470f5caea8d/static/font/roboto/Roboto-Thin.woff2 -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% load elixir %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | {% verbatim %} 9 |
10 |
11 |
12 | 21 | 22 |
23 | Hello, {{ user.username }}!
24 | Log in 25 | Log out 26 |
27 | 28 |
29 | {{ alert.message }} 30 | 31 |
32 |
33 |
34 |
35 | {% endverbatim %} 36 | 37 | 38 | 39 | 40 | --------------------------------------------------------------------------------