Django框架

Posted Dreamkily

tags:

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

1.Django框架

版本:1.11

创建:

  django-admin startproject xxx

  cd xxx

  python manage.py startapp app01

  python manage.py runserver 127.0.0.1:8000

2.HTTP请求本质

  1.请求生命周期

    - 网站本质:socket

      服务端(网站):

        1.先启动并监听:80端口

        3.获取请求信息:

           获取请求中的url

           根据url在已经写好的路由关系中进行匹配:

            {

              /login/   login

              /admin/  admin

              }

          请求头

          请求体

          处理请求

          响应内容:

 

      客户端(浏览器)

        http://cnblogs.com/wangmengzhu/

        2.发送请求

          - 连接:www.cnblogs.com:80

          - 发送数据:

              GET请求:请求体为空,传值在url后边?data

              POST请求:通过post可以传值

        3.接收响应内容

          响应头悄悄写到浏览器

          响应体在浏览器上显示

3.Django请求的生命周期

浏览器---wsgi协议---路由系统---视图函数---ORM

4.bootstrap实现用户登陆

5.基于Django的model操作数据库表

  •  创建用户表
models.py
class UserInfo(models.Model): id=models.AutoField(primary_key=True) user=models.CharField(max_length=32) pwd=models.CharField(max_length=64)
settings.py
INSTALLED_APPS = [
\'django.contrib.admin\',
\'django.contrib.auth\',
\'django.contrib.contenttypes\',
\'django.contrib.sessions\',
\'django.contrib.messages\',
\'django.contrib.staticfiles\',
\'app01.apps.App01Config\',#\'app01\'
]
SQLlite:
应用默认操作
  • 执行命令,创建数据库表  

python manage.py makemigrations

python manage.py migrate

#与数据库的类型一一对应
class UserInfo(models.Model):
    id=models.AutoField(primary_key=True)
    user=models.CharField(max_length=32,null=False,default=\'11\')
    pwd=models.CharField(max_length=64)
class Department(models.Model):
    id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=32)

  

  •  基于model实现数据查询和用户登陆
    def login(request):
        if request.method==\'GET\':
            #打开login.html文件
            #找到特殊标记{{msg}}
            #并将第三个特殊标识符替换
            #将替换完毕的字符串发送给用户浏览器
            return render(request,\'login.html\',{\'msg\':\'sajlsa\'})
        else:
            username=request.POST.get(\'username\')
            password=request.POST.get(\'password\')
            from app01 import models
            user=models.UserInfo.objects.filter(user=username,pwd=password).first()#表示查询这张表的所有数据
            if user:
                #在响应头中设置:locating:http://baidu.com无响应体,当作字符串提交给浏览器
                return redirect(\'/index/\')
            else:
                return render(request,\'login.html\',{\'msg\':\'用户名或者密码错误\'})
    
    def index(request):
        return redirect(\'http://www.baidu.com/\')
    
    def test(request):
        from app01 import models
        # user_list=models.UserInfo.objects.all()
        # for obj in user_list:
        #     #查询所有用户,相当于select * from userinfo
        #     #每一个obj都是一行数据
        #     print(obj.id)
        #select * from userinfo where user=\'alex\' and pwd=123
        #如果取到多条就是列表,里边有多个对象,取到一条,就是列表,里边有一个对象
        user_list=models.UserInfo.objects.filter(user=\'alex\',pwd=\'123\').all()
        #根据条件取数据库中的第一条数据
        user_list=models.UserInfo.objects.filter(user=\'alex\',pwd=\'123\').first()
        return HttpResponse(\'...\')
    

      

  • 查看部门列表
  • 添加部门
views.py

def part_add(request):
    """
    添加部门
    :param request:
    :return:
    """
    if request.method==\'GET\':
        return  render(request,\'part_add.html\')
    else:
        ti=request.POST.get(\'title\')
        #添加到数据库:models.Department
        models.Department.objects.create(title=ti)
        return redirect(\'/parts/\')

parts_add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css">
</head>
<body>

<div class="container">
    <form method="post">
        <div class="form-group">
            <h1>添加部门</h1>
            <label for="t1">部门名称</label>
            <input  id=\'t1\' type="text" class="form-control" name="title">
        </div>
            <input type="\'submit" value="添加" class="btn btn-success">
            <button type="submit" class="btn btn-default">Submit</button>
    </form>
</div>
</body>
</html>
  • 删除部门

 

vewis.py

def part_del(request):
    """
    删除部门
    :param request:
    :return:
    """
    nid=request.GET.get(\'nid\')
    #去数据库中将id=nid删除
    models.Department.objects.filter(id=nid).delete()
    return redirect(\'/parts/\')

  

  •  编辑部门

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div class="container">
    <h1>编辑部门</h1>
    <form method="post">
        <div class="form-group">
            <span><label for="t1">部门名称</label></span>
            <input  id=\'t1\' type="text" class="form-control" name="title" value="{{ val }}">
        </div>
            <button type="submit" class="btn btn-default">修改</button>
    </form>
</div>
</body>
</html>  

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

Django rest_framewok框架的基本组件

[TimLinux] Django 信号

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

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

text 来自Codyhouse框架的Browserlist片段源代码

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段