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'),
)
settings
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),
]
urls
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('删除的数据不存在')
views
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)
models
<!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>
login.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>
index.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>
add_user.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>
edit_user.html

 

posted @ 2018-11-26 20:35  CP喜欢晒太阳  阅读(111)  评论(0)    收藏  举报