day15web框架和Django
开始讲了web框架的本质,我觉得这个挺关键的。老说框架,到底是啥呢?首先自己写一个socket程序,尝试向浏览器发内容。b/s,浏览器访问网址,看到发的内容。根据不同地址显示不同内容。
自己写框架,再到用别人的框架——Django。一开始没讲太多理论性的东西,比较实际。安装Django,创建项目,创建APP。具体使用,先从url写起,然后是view里写函数,因为要返回页面,templates里写html页面,页面需要一些静态文件——放在static里面,存放数据要用到数据库——写在models。这样顺下来就比较清晰。
作业:用户管理,在长春写的。主要是抄抄改改,网上找了个登录,再把老师的出版社改改。
import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'c7o0186peqz*huqemu=rad2y!vm+*8h43-_46810otc&d=lfzs' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', #一开始,先注释掉这个,才能提交form表单 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = '用户管理.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = '用户管理.wsgi.application' # Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day15', 'USER': 'root', 'PASSWORD': '', 'HOST': '127.0.0.1', 'PORT': 3306, } } # Password validation # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/1.11/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), )
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/', views.login), url(r'^index/', views.index), url(r'^add_user/', views.add_user), url(r'^edit_user/', views.edit_user), url(r'^del_user/', views.del_user), ]
from django.shortcuts import render,HttpResponse,redirect # Create your views here. from app01 import models def login(request): ''' 登录 :param request: :return: ''' if request.method == "GET": #打开login.html文件 #找到特殊标记{{msg}} #并将第三个参数中字典总的对应值替换 #将替换完毕的字符串发送给用户浏览器 return render(request,"login.html",{'msg':''}) else: #去请求体中获取数据 username1 = request.POST.get("username") password1 = request.POST.get("password") print('接收的账号%s,密码%s'%(username1,password1)) userinfo = models.UserInfo.objects.filter(user=username1,pwd=password1).first() print(userinfo) if userinfo: return redirect('/index/') else: return render(request,'login.html',{'msg':'用户名或密码错误'}) def index(request): ''' 首页 :param request: :return: ''' user_list = models.UserInfo.objects.all() for i in user_list: print(i) return render(request, 'index.html', {'user_info':user_list}) def add_user(request): ''' 添加用户 :param request: :return: ''' err_msg = '' if request.method == 'POST': user_name = request.POST.get('user_name') pwd = request.POST.get('pwd') if user_name: user_list = models.UserInfo.objects.filter(user=user_name) print(user_list) if user_list: err_msg = '用户名已存在' else: user_obj = models.UserInfo.objects.create(user=user_name,pwd=pwd) print(user_obj) user_obj.save() return redirect('/index/') else: err_msg = '用户名不能为空' return render(request, 'add_user.html', {'err_msg': err_msg}) def edit_user(request): ''' 编辑用户信息 :param request: :return: ''' if request.method == 'POST': id = request.POST.get('id') user_name = request.POST.get('user_name') pwd = request.POST.get('pwd') user_obj = models.UserInfo.objects.get(id=id) user_obj.user = user_name user_obj.pwd = pwd # 向数据库提交 user_obj.save() return redirect('/index/') id = request.GET.get('id') user_obj = models.UserInfo.objects.get(id=id) return render(request, 'edit_user.html', {'user_obj': user_obj}) def del_user(request): # 获取要删除的用户id id = request.GET.get('id') # 删除对象 user_list = models.UserInfo.objects.filter(id=id) if user_list: user_list[0].delete() # 跳转到展示页面 return redirect('/index/') else: return HttpResponse('删除的数据不存在')
from django.db import models # Create your models here. class UserInfo(models.Model): id = models.AutoField(primary_key=True) user = models.CharField(max_length=32) pwd = models.CharField(max_length=64)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录页面</title> <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css"> </head> <body> <div style="width: 500px;margin: 0 auto;margin-top: 80px;"> <h2>登录界面</h2> <form class="form-horizontal" action="/login/" method="post"> <div class="form-group"> <label for="n1" class="col-sm-2 control-label">用户名</label> <div class="col-sm-10"> <input id="n1" type="text" name="username" class="form-control" placeholder="用户名"> </div> </div> <div class="form-group"> <label for="n2" class="col-sm-2 control-label">密码</label> <div class="col-sm-10"> <input id="n2" type="password" name="password" class="form-control" placeholder="密码"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <input type="submit" value="登 录" class="btn btn-primary">{{ msg }} </div> </div> </form> </div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>展示页</title> <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css"> </head> <body> <div style="width: 500px;margin: 0 auto;margin-top: 80px;"> <h2 style="text-align: center">用户信息展示</h2> <a href="/add_user/"><button class="btn btn-info"> 添加用户</button></a> <table class="table table-hover table-bordered" > <thead> <tr> <td>序号</td> <td>id</td> <td>用户名</td> <td>密码</td> <td>操作</td> </tr> </thead> <tbody> {% for i in user_info %} <tr> <td>{{ forloop.counter }}</td> <td>{{ i.id }}</td> <td>{{ i.user }}</td> <td>{{ i.pwd }}</td> <td> <a href="/del_user/?id={{ i.id }}"><button class="btn btn-danger">删除</button></a> <a href="/edit_user/?id={{ i.id }}"><button class="btn btn-info">编辑</button></a> </td> </tr> {% endfor %} </tbody> </table> </div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>添加用户</title> <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css"> </head> <body> <h3>添加用户</h3> <form action="/add_user/" method="post"> <p> 用户名: <input class="input-group" type="text" name="user_name"><span>{{ err_msg }}</span> </p> <p> 密码: <input class="input-group" type="text" name = 'pwd'> </p> <p> <button class="btn btn-success" type="submit">提交</button> </p> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>编辑用户信息</title> <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css"> </head> <body> <form action="/edit_user/" method="post"> <input type="text" name="id" value="{{ user_obj.id }}" style="display: none"> <p> 用户名: <input type="text" name="user_name" value="{{ user_obj.user }}"> </p> <p> 密码: <input type="text" name="pwd" value="{{ user_obj.pwd }}"> </p> <p> <button class="btn btn-success" type="submit">提交</button> </p> </form> </body> </html>

浙公网安备 33010602011771号