Django讲解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django讲解相关的知识,希望对你有一定的参考价值。

什么是Django?

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。

Django框架介绍:

Django 项目是一个python定制框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django 框架的核心组件有:
  1. 用于创建模型的对象关系映射
  2. 为最终用户设计的完美管理界面
  3. 一流的 URL 设计
  4. 设计者友好的模板语言
  5. 缓存系统。

技术分享

创建Djiano项目:

首先安装Djiano:

pip3 install django

创建Djiano项目:

django-admin startproject mysite

Djiano目录介绍:

mysite#对整个文件进行配置
    __init__.py
    settings.py#配置文件
    urls.py #url 和函数或者类对应关系
    wsgi.py # 导入模块,本质上创建一个socket
manage.py #管理Django程序

自定义一个url访问:

首先导入返回的模块:

from django.shortcuts import HttpResponse

在urls.py里面定义一个函数:

def home(request):
    return HttpResponse("<h1>Hello</h1>")#返回Hello

设定访问目录:

urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^home/, home),#r设定访问的目录 如http://AbeoHu.com/home  后面的home指的是函数
]

访问127.0.0.1:8000:

技术分享

创建APP

如果要创建一个CMDB项目,那么CMDB就是一个APP,业务代码要和前端要分开

创建App:

python manage.py startapp cmdb

App目录介绍:

views.py:存放业务代码

比如我们将我们上边的home函数放到这里,url只需要导入模块就可以访问:

views配置:

from django.shortcuts import HttpResponse
def home(request):
    return HttpResponse("<h1>Hello</h1>")

urls配置:

url(r^home/, views.home),

App目录功能:

cmdb
    -migraations 数据修改表结构记录
    -__init__  导入文件需要
    -admin  后台管理
    -tests 单元测试
    -views 业务代码

 通过Djano去写一个登陆页面:

templates:存放html文件

render 自动打开并返回页面

业务代码文件:

技术分享
from django.shortcuts import render
from django.shortcuts import HttpResponse
def home(request):
    return HttpResponse("<h1>Hello</h1>")
def login(request):
    return render(request,"login.html")
# Create your views here.
业务代码

前端文件:

技术分享
<!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="text" />
            <input type="submit" value="提交" />
            <span style="color: red">{{ error_mag }}</span>
        </p>
    </form>
</body>
</html>
Html

url文件:

技术分享
"""web URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r‘^$‘, views.home, name=‘home‘)
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r‘^$‘, Home.as_view(), name=‘home‘)
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r‘^blog/‘, include(‘blog.urls‘))
"""
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import HttpResponse
from cmdb import views
urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^home/, views.home),
    url(r^login/, views.login),
]
url文件

显示界面:

技术分享

配置静态目录:

css、jss文件

首先创建目录存放静态文件

我这里用的static

里面写css样式

技术分享
body{
    background-color: #eeeeee;
}
commends

setting配置让html访问静态文件:

技术分享
STATICFILES_DIRS=(
    os.path.join(BASE_DIR,static),
)
setting

再次访问,生效

 

OK,现在一个简单的登陆页面做完了,但是,我们提交的页面提交到哪里呢?

默认是提交到login文件里,但是会报错,怎么办?注释文件settings的内容

技术分享
MIDDLEWARE = [
    django.middleware.security.SecurityMiddleware,
    django.contrib.sessions.middleware.SessionMiddleware,
    django.middleware.common.CommonMiddleware,
    #‘django.middleware.csrf.CsrfViewMiddleware‘,
    django.contrib.auth.middleware.AuthenticationMiddleware,
    django.contrib.messages.middleware.MessageMiddleware,
    django.middleware.clickjacking.XFrameOptionsMiddleware,
]
注释

 

在后台获取用户输入的内容:

用户提交方式有Get和Post

怎么获取?

request参数里面包含了用户所有的信息

request.methord获取用户提交方式

request.POST封装了所有POST方法

return redirect重定向

特殊字符{{error_masage}}

技术分享
from django.shortcuts import render
from django.shortcuts import HttpResponse,render,redirect
def home(request):
    return  HttpResponse("<H1>CMDB</H1>")
# Create your views here.
def login(request):
    error_mag=""
    #request用户所有的信息
    if request.method=="POST":
        user=request.POST.get("user",None)#获取用户输入的用户
        pwd=request.POST.get("pwd",None)#获取用户输入的密码
        if user=="root" and pwd=="123456":#做判断
            return redirect("http://www.baidu.com")
        else:
            error_mag="用户名和密码不匹配"
    return render(request,"login.html",{"error_mag":error_mag})#返回用户名密码不匹配
views
技术分享
<!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="text" />
            <input type="submit" value="提交" />
            <span style="color: red">{{ error_mag }}</span>
        </p>
    </form>
</body>
</html>
login

OK,那么简单的登陆页面就做完了,继续做后台界面

之前咱们的登陆界面,登陆成功后是百度页面,那咱们自己做个后台。

后台程序我们在去建立一个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>
后台
技术分享
from django.shortcuts import render
from django.shortcuts import HttpResponse,render
def home(request):
    return  HttpResponse("<H1>CMDB</H1>")
# Create your views here.
def login(request):
    error_mag=""
    if request.method=="POST":
        user=request.POST.get("user",None)
        pwd=request.POST.get("pwd",None)
        if user=="root" and pwd=="123456":
            return render(request,"home.html")
        else:
            error_mag="用户名和密码不匹配"
    return render(request,"login.html",{"error_mag":error_mag})
userlist=[
    {"name":"alex","gender":"男","email":"[email protected]"}
]
def home(request):
    if request=="POST":
        u=request.POST.get("username")
        g=request.POST.get("gender")
        e=request.POST.get("email")
        temp={"name":u,"gender":g,"email":e}
        userlist.append(temp)
    return  render(request,"home.html",{"user_list":userlist})
前端

 

以上是关于Django讲解的主要内容,如果未能解决你的问题,请参考以下文章

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

Django讲解

Django REST框架--认证和权限

如何在 Django 中显式重置模板片段缓存?

使用 Django 模板作为片段

python 通过django片段很多很多