作者 张志平

first

  1 +FROM python:3.6.3
  2 +
  3 +# 设置工作目录
  4 +RUN mkdir -p /usr/src/app
  5 +WORKDIR /usr/src/app
  6 +
  7 +# 添加依赖(利用Docker 的缓存)
  8 +ADD ./requirements.txt /usr/src/app/requirements.txt
  9 +
  10 +# 安装依赖
  11 +RUN pip install -r requirements.txt
  12 +
  13 +# 添加应用
  14 +ADD . /usr/src/app
  15 +
  16 +# 运行服务
  17 +CMD python manage.py runserver 0.0.0.0:8000
不能预览此文件类型
不能预览此文件类型
不能预览此文件类型
不能预览此文件类型
不能预览此文件类型
  1 +from django.contrib import admin
  2 +
  3 +# Register your models here.
  1 +from django.apps import AppConfig
  2 +
  3 +
  4 +class BlogConfig(AppConfig):
  5 + name = 'blog'
  1 +from django import forms as dforms
  2 +from django.forms import fields
  3 +
  4 +class UserForm(dforms.Form):
  5 + username = fields.CharField()
  6 + email = fields.EmailField()
  1 +# Generated by Django 2.0 on 2018-05-29 10:14
  2 +
  3 +from django.db import migrations, models
  4 +
  5 +
  6 +class Migration(migrations.Migration):
  7 +
  8 + initial = True
  9 +
  10 + dependencies = [
  11 + ]
  12 +
  13 + operations = [
  14 + migrations.CreateModel(
  15 + name='UserInfo',
  16 + fields=[
  17 + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  18 + ('username', models.CharField(max_length=32)),
  19 + ('email', models.EmailField(max_length=32)),
  20 + ],
  21 + ),
  22 + ]
  1 +from django.db import models
  2 +
  3 +class UserInfo(models.Model):
  4 + username = models.CharField(max_length=32)
  5 + email = models.EmailField(max_length=32)
  6 + def __str__(self):
  7 + return self.username
  8 +# Create your models here.
  1 +from django.test import TestCase
  2 +
  3 +# Create your tests here.
  1 +from django.shortcuts import render
  2 +from django.shortcuts import redirect
  3 +from . import models
  4 +from .form import *
  5 +def users(request):
  6 + user_list = models.UserInfo.objects.all()
  7 + return render(request, 'users.html', {'user_list': user_list})
  8 +
  9 +
  10 +def add_user(request):
  11 + if request.method == 'GET':
  12 + obj = UserForm()
  13 + return render(request, 'add_user.html', {'obj': obj})
  14 + else:
  15 + obj = UserForm(request.POST)
  16 + if obj.is_valid():
  17 + models.UserInfo.objects.create(**obj.cleaned_data)
  18 + return redirect('/users/')
  19 + else:
  20 + return render(request, 'add_user.html', {'obj': obj})
  21 +
  22 +
  23 +def edit_user(request, nid):
  24 + if request.method == "GET":
  25 + data = models.UserInfo.objects.filter(id=nid).first()
  26 + obj = UserForm({'username': data.username, 'email': data.email})
  27 + return render(request, 'edit_user.html', {'obj': obj, 'nid': nid})
  28 + else:
  29 + obj = UserForm(request.POST)
  30 + if obj.is_valid():
  31 + models.UserInfo.objects.filter(id=nid).update(**obj.cleaned_data)
  32 + return redirect('/users/')
  33 + else:
  34 + return render(request, 'edit_user.html', {'obj': obj, 'nid': nid})
  1 +#!/usr/bin/env python
  2 +import os
  3 +import sys
  4 +
  5 +if __name__ == "__main__":
  6 + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mytest.settings")
  7 + try:
  8 + from django.core.management import execute_from_command_line
  9 + except ImportError as exc:
  10 + raise ImportError(
  11 + "Couldn't import Django. Are you sure it's installed and "
  12 + "available on your PYTHONPATH environment variable? Did you "
  13 + "forget to activate a virtual environment?"
  14 + ) from exc
  15 + execute_from_command_line(sys.argv)
  1 +import pymysql
  2 +pymysql.install_as_MySQLdb()
不能预览此文件类型
不能预览此文件类型
  1 +"""
  2 +Django settings for mytest project.
  3 +
  4 +Generated by 'django-admin startproject' using Django 2.0.
  5 +
  6 +For more information on this file, see
  7 +https://docs.djangoproject.com/en/2.0/topics/settings/
  8 +
  9 +For the full list of settings and their values, see
  10 +https://docs.djangoproject.com/en/2.0/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/2.0/howto/deployment/checklist/
  21 +
  22 +# SECURITY WARNING: keep the secret key used in production secret!
  23 +SECRET_KEY = '5ap(3kvz-e5@@pm(6l^s66#=+tba-(c0md(9u4+jth98hahid9'
  24 +
  25 +# SECURITY WARNING: don't run with debug turned on in production!
  26 +DEBUG = True
  27 +
  28 +ALLOWED_HOSTS = ['*']
  29 +
  30 +
  31 +# Application definition
  32 +
  33 +INSTALLED_APPS = [
  34 + 'django.contrib.admin',
  35 + 'django.contrib.auth',
  36 + 'django.contrib.contenttypes',
  37 + 'django.contrib.sessions',
  38 + 'django.contrib.messages',
  39 + 'django.contrib.staticfiles',
  40 + 'blog',
  41 +]
  42 +
  43 +MIDDLEWARE = [
  44 + 'django.middleware.security.SecurityMiddleware',
  45 + 'django.contrib.sessions.middleware.SessionMiddleware',
  46 + 'django.middleware.common.CommonMiddleware',
  47 + 'django.middleware.csrf.CsrfViewMiddleware',
  48 + 'django.contrib.auth.middleware.AuthenticationMiddleware',
  49 + 'django.contrib.messages.middleware.MessageMiddleware',
  50 + 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  51 +]
  52 +
  53 +ROOT_URLCONF = 'mytest.urls'
  54 +
  55 +TEMPLATES = [
  56 + {
  57 + 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  58 + 'DIRS': [os.path.join(BASE_DIR, 'templates')],
  59 + 'APP_DIRS': True,
  60 + 'OPTIONS': {
  61 + 'context_processors': [
  62 + 'django.template.context_processors.debug',
  63 + 'django.template.context_processors.request',
  64 + 'django.contrib.auth.context_processors.auth',
  65 + 'django.contrib.messages.context_processors.messages',
  66 + ],
  67 + },
  68 + },
  69 +]
  70 +
  71 +WSGI_APPLICATION = 'mytest.wsgi.application'
  72 +
  73 +
  74 +# Database
  75 +# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
  76 +
  77 +DATABASES = {
  78 + 'default': {
  79 + 'ENGINE': 'django.db.backends.mysql',
  80 + 'NAME': 'mytest',
  81 + 'USER': 'root',
  82 + 'PASSWORD': 'root@2013',
  83 + 'HOST': os.environ.get('MYSQL_SERVICE_HOST'),
  84 + 'PORT': 3306,
  85 + }
  86 +}
  87 +
  88 +
  89 +# Password validation
  90 +# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
  91 +
  92 +AUTH_PASSWORD_VALIDATORS = [
  93 + {
  94 + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
  95 + },
  96 + {
  97 + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
  98 + },
  99 + {
  100 + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
  101 + },
  102 + {
  103 + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
  104 + },
  105 +]
  106 +
  107 +
  108 +# Internationalization
  109 +# https://docs.djangoproject.com/en/2.0/topics/i18n/
  110 +
  111 +LANGUAGE_CODE = 'en-us'
  112 +
  113 +TIME_ZONE = 'UTC'
  114 +
  115 +USE_I18N = True
  116 +
  117 +USE_L10N = True
  118 +
  119 +USE_TZ = True
  120 +
  121 +
  122 +# Static files (CSS, JavaScript, Images)
  123 +# https://docs.djangoproject.com/en/2.0/howto/static-files/
  124 +
  125 +STATIC_URL = '/static/'
  1 +"""mytest URL Configuration
  2 +
  3 +The `urlpatterns` list routes URLs to views. For more information please see:
  4 + https://docs.djangoproject.com/en/2.0/topics/http/urls/
  5 +Examples:
  6 +Function views
  7 + 1. Add an import: from my_app import views
  8 + 2. Add a URL to urlpatterns: path('', views.home, name='home')
  9 +Class-based views
  10 + 1. Add an import: from other_app.views import Home
  11 + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
  12 +Including another URLconf
  13 + 1. Import the include() function: from django.urls import include, path
  14 + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
  15 +"""
  16 +from django.contrib import admin
  17 +from django.urls import path
  18 +from blog import views
  19 +
  20 +urlpatterns = [
  21 + path('admin/', admin.site.urls),
  22 + path('', views.users, name='users'),
  23 + path('users/', views.users, name='users'),
  24 + path('add_user/', views.add_user),
  25 + path('edit_user/<int:nid>/', views.edit_user,name='edit_user'),
  26 +]
  1 +"""
  2 +WSGI config for mytest 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/2.0/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", "mytest.settings")
  15 +
  16 +application = get_wsgi_application()
  1 +Django==2.0
  2 +PyMySQL==0.8.0
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 +<head>
  4 + <meta charset="UTF-8">
  5 + <title>Title</title>
  6 +</head>
  7 +<body>
  8 + <form action="/add_user/" method="post" novalidate>
  9 + {% csrf_token %}
  10 + <p>{{ obj.username }}{{ obj.errors.username.0 }}</p>
  11 + <p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
  12 + <input type="submit" value="提交" />
  13 + </form>
  14 +</body>
  15 +</html>
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 +<head>
  4 + <meta charset="UTF-8">
  5 + <title>Title</title>
  6 +</head>
  7 +<body>
  8 + <form action="/edit_user/{{ nid }}/" method="post" novalidate>
  9 + {% csrf_token %}
  10 + <p>{{ obj.username }}{{ obj.errors.username.0 }}</p>
  11 + <p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
  12 + <input type="submit" value="提交" />
  13 + </form>
  14 +</body>
  15 +</html>
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 +<head>
  4 + <meta charset="UTF-8">
  5 + <title>Title</title>
  6 + <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
  7 +</head>
  8 +<body>
  9 + <a class="btn btn-primary" id="addBtn" href="/add_user/">添加</a>
  10 + <a class="btn btn-primary" id="cancel" href="/get_classes.html">跳转</a>
  11 + <ul>
  12 + {% for row in user_list %}
  13 + <li>{{ row.id }}-{{ row.username }}-{{ row.email }} <a class="btn btn-warning" href="/edit_user/{{ row.id }}/">编辑</a></li>
  14 + {% endfor %}
  15 + </ul>
  16 +</body>
  17 +</html>