• 1.Django安装与运行


    Django基本配置

    Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能

    1.安装

    # windows 直接用pip进行安装
    pip install django
     
    # 生成的django文件加入到系统环境变量

    2.创建并启动

    创建
    django-admin startproject mysite
    
    运行
    python manage.py runserver 127.0.0.1:8001

    浏览器访问:
    http://
    127.0.0.1:8001/
    
    

    3.mysite目录结构

    mysite    #目录
     - mysite      # 对整个程序进行配置
      - init
      - settings  # 配置文件
      - urls       # URL对应关系
      - wsgi      # 遵循WSIG规范,uwsgi + nginx
     - manage.py     # 管理Django程序:

    Django业务配置

    1.创建app

    python manage.py startapp cmdb     -->Terminal里面运行

    2.app目录结构

    # 目录结构
    - cmdb
        - migrations  #数据库操作记录(只是修改表结构的记录)
        - init      #表示python数据包(python3中有无均可)
        - admin      #Django为我们提供的后台管理
        - apps      #配置当前app
        - models     #创建数据库表结构,写指定的类,通过命令可以创建数据库结构
        - tests      #单元测试
        - views      #写业务逻辑代码,最重要的就是这个文件了

    3.templates模板

    (1)在templates目录下生成要给用户显示的登录页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            label{
                width: 80px;
                text-align: right;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <form action="/login" method="post">
            <p>
                <label for="username">用户名:</label>
                <input id="username" name="user" type="text" />
            </p>
            <p>
                <label for="password">密码:</label>
                <input id="password" name="pwd" type="password" />
                <input type="submit" value="提交" />
            </p>
        </form>
    </body>
    </html>
    login.html

    (2)修改urls文件增加login路径

    from django.conf.urls import url
    from django.contrib import admin
    from cmdb import views        #导入views模块
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^login', views.login),       #添加login.html的url,后面要加逗号
    ]

    (3)修改view文件,对数据进行处理

    from django.shortcuts import HttpResponse
    from django.shortcuts import render
     
    def login(request):
        return render(request,'login.html')
     
        # 上面代码等同于这个
        # f = open('templates/login.html','r',encoding='utf-8')
        # data = f.read()
        # f.close()
        # return HttpResponse(data)

    (4)配置静态文件static路径

    静态文件static里面是存放css和js文件的,要想显示相应的样式,必须先修改settings文件配置

    # settings.py文件里增加下面内容
    
    STATIC_URL = '/static/'
    STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    )

    配置完路劲后就可以用css和js文件了

    Django表单交互

    1.获取表单提交类型做相应处理,用户名密码输正确跳转到页面,输入错误有提示信息

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/commons.css" />
        <style>
            label{
                width: 80px;
                text-align: right;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <form action="/login/" method="post">
            <p>
                <label for="username">用户名:</label>
                <input id="username" name="user" type="text" />
            </p>
            <p>
                <label for="password">密码:</label>
                <input id="password" name="pwd" type="password" />
                <input type="submit" value="提交" />
                <span style="color: red;">{{ error_msg }}</span>
            </p>
        </form>
    
    </body>
    </html>
    login.html
    from django.shortcuts import HttpResponse
    from django.shortcuts import render
    from django.shortcuts import redirect
    
    
    def login(request):
        # request  包含了用户提交的所有信息
        # print(request.method)
    
        error_msg = ''
        if request.method == 'POST':
            user = request.POST.get('user', None)
            pwd = request.POST.get('pwd', None)
            if user == 'root' and pwd == '123':
                # 去跳转
                return redirect('http://www.baidu.com')
            else:
                error_msg = '用户名或密码错误'
    
        return render(request, 'login.html', {'error_msg': error_msg})

    2.模拟数据库交互

    访问login界面,用户输入用户名跳转到home页面

    (1)登陆页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/commons.css" />
        <style>
            label{
                width: 80px;
                text-align: right;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <form action="/login/" method="post">
            <p>
                <label for="username">用户名:</label>
                <input id="username" name="user" type="text" />
            </p>
            <p>
                <label for="password">密码:</label>
                <input id="password" name="pwd" type="password" />
                <input type="submit" value="提交" />
                <span style="color: red;">{{ error_msg }}</span>
            </p>
        </form>
    
    </body>
    </html>
    login.html

    (2)home页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body style="margin: 0">
        <div style="height: 48px;background-color: #dddddd"></div>
        <div>
            <form action="/home/" method="post">
                <input type="text" name="username" placeholder="用户名" />
                <input type="text" name="email"  placeholder="邮箱"/>
                <input type="text" name="gender"  placeholder="性别"/>
                <input type="submit" value="添加" />
            </form>
        </div>
        <div>
            <table>
                {% for row in user_list %}
                    <tr>
                        <td>{{ row.username }}</td>
                        <td>{{ row.gender }}</td>
                        <td>{{ row.email }}</td>
                    </tr>
                {% endfor %}
    
            </table>
        </div>
    
    
    </body>
    </html>
    home.html

    (3)修改view文件,对输入的内容进行处理

    from django.shortcuts import HttpResponse
    from django.shortcuts import render
    from django.shortcuts import redirect
    
    def login(request):
        # request  包含了用户提交的所有信息
        # print(request.method)
    
        error_msg = ''
        if request.method == 'POST':
            user = request.POST.get('user', None)
            pwd = request.POST.get('pwd', None)
            if user == 'root' and pwd == '123':
                # 去跳转
                return redirect('/home')
            else:
                error_msg = '用户名或密码错误'
    
        return render(request, 'login.html', {'error_msg': error_msg})
    
    USER_LIST = [
        {'id': 1, 'username': 'derek', 'email': '111', "gender": ''},
        {'id': 2, 'username': 'jack', 'email': '222', "gender": '女'},
        {"id": 3, 'username': 'tom', 'email': '333', "gender": ''},
    ]
    
    def home(request):
        if request.method == "POST":
            # 获取用户提交的数据 POST请求中
            u = request.POST.get('username')
            e = request.POST.get('email')
            g = request.POST.get('gender')
            temp = {'username': u, 'email': e, "gender": g}
            USER_LIST.append(temp)
        return render(request, 'home.html', {'user_list': USER_LIST})

    3.获取checkbox多个值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/login/" method="POST" >
            <p>
                111:<input type="checkbox"  name="favor" value="11"/>
                222:<input type="checkbox" name="favor" value="22"/>
                333:<input type="checkbox" name="favor" value="33"/>
            </p>
            <input type="submit" value="提交"/>
        </form>
    </body>
    </html>
    login

    修改views.py文件对表单处理

    from django.shortcuts import HttpResponse
    from django.shortcuts import render
    from django.shortcuts import redirect
    
    
    def login(request):
        #checkbox  多选框
        if request.method == "POST":
            favor_list = request.POST.getlist("favor")      #getlist获取多个值
            print(favor_list)           #多选框获取到的是列表格式
            #['11', '22', '33']
            return render(request,"login.html")
        elif request.method == "GET":
            return render(request,"login.html")
        else:
            print("other")

    当用户提交之后,在后台上可以获取用户提交的信息,如下图

    4.上传文件file

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/login" method="POST" enctype="multipart/form-data">
            <p>
                <input type="file" name="files"/>
            </p>
            <input type="submit" value="提交"/>
        </form>
    </body>
    </html>
    login.html

    views.py

    from django.shortcuts import render,HttpResponse
    import os
    def login(request):
        #file 上传文件
        if request.method == "POST":
            obj = request.FILES.get('files')       #用files获取文件对象
            if obj:
                print(obj, type(obj), obj.name)
                # test.jpg <class 'django.core.files.uploadedfile.InMemoryUploadedFile'> test.jpg
                import os
                file_path = os.path.join('upload', obj.name) #保存用户上传文件的路劲
                f = open(file_path, "wb")
                for item in obj.chunks():      #chunks表示所有的数据块,是个迭代器
                    f.write(item)
                f.close()
            return render(request,"login.html")
        elif request.method == "GET":
            return render(request,"login.html")
        else:
            print("other")
  • 相关阅读:
    [Wap] 制作自定义WmlListAdapter来实现Mobile.List控件的各种效果
    [EntLib]UAB(Updater Application Block)下载
    jarhoo是一个很棒的地方
    [GoogleMap]利用GoogleMap地图的这个应用真是太狠了[1]
    [J2ME] VideoCoolala(MobileWebCam)开源说明
    [p2p]手机是否可以通过JXTA网络与PC机/PocketPC/WindowsMobile实现P2P呢?
    Android Layout XML属性
    什么是9.png
    android主流UI布局
    Android开发之旅: Intents和Intent Filters(理论部分)
  • 原文地址:https://www.cnblogs.com/gaidy/p/11757323.html
Copyright © 2020-2023  润新知