二、django简介

一、三大web框架理论以及django启动

1. 三大web框架及特点

    a. Django

        大而全,略显笨重

    b. Flask

        短小精悍,自带的功能少,依赖于第三方组件。受限于第三方的开发者。

    c. Tornado

        天生的异步非阻塞框架,速度特别快,能抗住高并发。

2. 使用django注意事项

    a. 计算机名称不能有中文

    b. 所有项目名称也不要有中文

    c. python解释器建议使用3.4到3.6版本

    d. 一个pycharm窗口跑一个项目

    e. 暂时使用1.11.11版本

3. django运行

    a. 下载django

        pip3 install django==1.11.11

    b. 验证django

        django-admin

    c. 创建项目

        1. django-admin startproject mysite

        创建mysite文件夹,里面有一个文件夹和manage.py

        2. 命令行创建django项目,默认不会自动创建templates文件夹,并且settings配置文件中也没有改文件夹的路径配置。

        在settings里的TEMPLATES列表中加上:

        DIR:[os.path.join(BASE_DIR,'templates')]

    d. 启动项目

        1. 切换到项目目录下  cd  /mysite

        2. python3 manage.py runserver
        python3 manage.py runserver 127.0.0.1:9090

        默认本机8000端口,也可以指定IP和端口

    e. 创建app

        python3 manage.py startapp app01

        创建的app要找settings配置文件 INSTALLED_APPS 列表中添加app名称。

4. 小白必会三板斧

    1. HttpRespons

        返回字符串

    2. render

        返回html文件并支持传值(配置好了templates文件夹)

        render(request, 'login.html')

    3. redirect

            1. 写本网站路径后缀

                /index

            2. 写其他网站的全路径

二、django请求流程图

三、静态文件

1. 静态文件特点

    1. 网站所使用到的提前写的css、js、第三方的前端模块、图片都叫做静态资源。

    2. 默认情况下网站使用的所有静态文件资源全放在static文件夹下。通常情况下,static文件夹下还会建css文件夹、js文件夹、font文件夹、img文件夹、bootstrap文件夹、fontawesome文件夹等。

    3. django中需要手动创建static文件夹

2. 静态文件配置

    1. 手动开设静态文件访问资源,在settings.py最后面后面加上下面的语句,列表中可以添加多条语句

        STATICFILES_DIRS = [
                os.path.join(BASE_DIR, 'static')
                os.path.join(BASE_DIR, 'static1')
        ]

    2. 文件头引入静态文件资源

        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
        <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
        <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>

    3. 静态文件动态绑定,在文件头加上

        {% load static %}
        <link rel="stylesheet" href="{% static'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
        <script src="{% static'/static/bootstrap-3.3.7-dist/js/bootstrap.min.js' %}" ></script>

        

四、request对象

    1. request对象包含了所有请求相关数据。内部包含大量属性和方法。

    2. 默认处理get请求,但post请求也会执行。

    3. request方法

        a. 获取前端请求方式。

                request.method

        b. 请求携带数据的方式

                url?username=byx&password=123

        c. 获取用户提交的post数据(get格式相同)

                request.POST
                # <QueryDict: {'username': ['byx'], 'password': ['123']}>

                username = request.POST.get('username')    # byx <class 'str'>
                password = request.POST.get('password')    # 123 <class 'str'>
                # get方法默认取列表最后一个元素,如果想获取列表,需要使用getlist()

    4. 针对不同请求方法做不同处理

        def login(request):
            if request.method == 'POST':
                return HttpResponse('收到post请求了')
            return render(request, 'login.html')

五、django连接mysql

1. 配置settings

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test',
            'USER': 'root',
            'PASSWORD': '123',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'CHARSET': 'utf8'
        }
    }

2. 在项目或者应用名下的__init__.py中写上

    import pymysql
    pymysql.install_as_MySQLdb()
    

六、django orm简介

1. orm优缺点

    a. 优点

        简单方便的操作数据库

    b. 缺点

        封装程度太高,查询效率低

2. orm表关系建立

    a. 一对一外键

        格式

            author_detail = models.OneToOneField(to='Author_detail')

    b. 一对多外键

        1. 格式

            publish = model.ForeignKey(to='Publish')

        2. 注意

            1. 一对多和一对一外键字段创建时,数据库中表字段会自动加上_id后缀

            2. to默认关联对方表主键字段

    c. 多对多外键

        1. 格式

                author = models.ManyToManyField('to=Author')        

        2. 注意

            1. django会自动创建第三张表

            2. author这个字段是一个虚拟字段,不在表中展示出来,仅仅是起到一个告诉orm第三张表关系的作用

3. 操作orm

    a. 数据库迁移命令

        1. 在migrations文件夹内记录数据库的修改

            python3 manage.py makemigrations

        2. 将修改操作同步到数据库中

            python3  manage.py migtate

    b. 在应用下的models.py中书写模型类

        class User(models.Model):
                id = models.AutoField(primary_key=True)    # django会自动创建
                username = models.CharField(max_length=32)    # 必须有max_length参数
                password = models.IntegerField()

    c. 模型表字段的增删改查

        1. 修改

            直接改代码,执行数据库迁移命令。

        2. 删除

            直接注释对应的字段,再执行数据库迁移命令

        3. 新增

            1. 方式一:

                设置默认值

                email = models.EmailField(default='[email protected]')

            2. 方式二:

                允许字段为空

                phone = models.BigIntegerField(null=True)

            3. 方式三:

                根据提示临时设默认值

    d. 数据的增删改查

        1. 按关键字查询

            filter返回‘列表’套对象:<QuerySet [<User: User object>]>
            filter括号内可以放多个关键字参数,参数之间是and关系

            data = models.User.objects.filter(username=username)
            user_obj = data.first()
            print(user_obj.username)

        2. 查询表中所有数据

            返回‘列表’套对象<QuerySet [<User: User object>, <User: User object>]>
            user_list = models.User.objects.all()

        3. 添加数据

            返回当前被创建的对象本身
            models.User.object.create(username=username, password=int(password))

        4. 修改数据

            models.User.objects.filter(id=1).update(username=username, password=password)

        5. 删除数据

            models.User.objects.filter(id=1).delete()

    

七、图书管理系统表关系示例

class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8, decimal_palces=2)

    # 图书与出版社一对多关系
    publish = model.ForeignKey(to='Publish')    # to默认关联对方表主键字段

    # 图书跟作者是多对多关系
    author = models.ManyToManyField('to=Author')    

class Publish(models.Model):
    title = models.CharField(max_length=32)
    email = models.EmailField()

class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()

    # 作者与作者详情一对一的关系
    author_detail = models.OneToOneField(to='Author_detail')

class Author_detail(models.Model):
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=32)

八、前端修改数据示例

1. 功能

    a. 查询数据库中所有的数据展示到前端页面

    b. 前端页面上针对不同数据都有编辑和删除功能

2. 视图函数

    1. 登录功能视图函数

        def login(request):
    ????????
            if request.method == 'post':

                username = request.POST.get('username')
                password = request.POST.get('password')
    ????????????????????????????????
                # 数据库查询数据
                data = models.User.objects.filter(username=username, password=password)
    ????????????????????????
                if not data:
                    return HttpResponse('当前用户不存在')
    ????????????????????????
                user_obj = data[0]

                if user_obj.password == int(password):
                    return HttpResponse('登录成功')???????????
                return HttpResponse('密码错误')

            return render(request, 'login.html')

    2. 展示用户信息视图函数

        def userlist(request):

            # 将数据库中用户表所有的数据查询出来,传递给html
            user_list = models.User.objects.all()

            return render(request, 'userlist.html', {'user_list': user_list})

    3. 新增用户信息视图函数

        def add_user(request):
        ????????
            # 给用户返回一个添加页面,用户输入、提交,数据写入数据库
            if request.method == 'POST':
                username = request.POST.get('username')
                password = request.POST.get('password')
        ????????????????
                # 写入数据库
                models.User.object.create(username=username, password=int(password))
        ????????????????????????
                # 跳转到查看页面
                return redirect('/userlist/')
            return render(request, 'add_user.html')

    4. 编辑用户信息

        def edit_user(request):

            # 利用get请求携带参数的方式,获取用户想要编辑的数据的id值
            edit_id = request.GET.get('edit_id')

            if request.method == "POST":
                username = request.POST.get('username')
                password = request.POST.get('password')

                # 修改数据库中的数据
                models.User.objects.filter(id=edit_id).update(username=username, password=password)
                return redirect('/userlist/')
            # 将用户想要编辑的数据查询出来,展示到编辑页面上
            edit_obj = models.User.objects.filter(id=edit_id).first()

            # 返回一个编辑页面,该编辑页面上展示用户想要编辑的数据信息
            return render(request, 'edit_user.html', {'edit_obj': edit_obj})

3. html页面

    1. login.html

        <div class="container">
            <div class="row">
                <div class="col-md-8 col-md-offset-2">
                    <h1 class="text-center">登录</h1>
                    <form action="" method="post">
                        <p>username: <input type="text" name="username" class="form-control"></p>
                        <p>password: <input type="password" name="password" class="form-control"></p>
                        <input type="submit" class="btn btn-success pull-right">
                    </form>
                </div>
            </div>
        </div>

    2. userlist.html

        <div class="container">
            <div class="row">
                <div class="col-md-8 col-md-offset-2">
                    <h1>数据展示</h1>
                    <a href="/add_user">新增</a>
                    <table class="table table-hover table-bordered table-striped">
                        <thead>
                            <tr>
                                <th>id</th>
                                <th>username</th>
                                <th>password</th>
                                <th>actions</th>
                            </tr>
                        </thead>
                        <tbody>
                            {% for user in user_list % }
                                <tr>
                                    <td>{{ user.id }}</td>
                                    <td>{{ user.username }}</td>
                                    <td>{{ user.user.password }}</td>
                                    <td>
                                        <a href="/edit_user/?edit_id={{ user.id  }}" class="btn btn-primary btn-sm">编辑</a>
                                        <a href="#" class="btn btn-danger btn-sm">删除</a>
                                    </td>
                                </tr>
                            {% endfor %}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>

    3. add_user.html

        <div class="container">
            <div class="row">
                <div class="col-md-8 col-md-offset-2">
                    <h1 class="text-center">添加用户</h1>
                    <form action="" method="post">
                        <p>username: <input type="text" name="username" class="form-control"></p>
                        <p>password: <input type="password" name="password" class="form-control"></p>
                        <input type="submit" class="btn btn-warning pull-right">
                    </form>
                </div>
            </div>
        </div>

    4. edit_user.html

        <div class="container">
            <div class="row">
                <div class="col-md-8 col-md-offset-2">
                    <h1 class="text-center">编辑用户</h1>
                    <form action="" method="post">
                        <p>username: <input type="text" name="username" class="form-control" value="{{ edit_obj.username}}"></p>
                        <p>password: <input type="text" name="text" class="form-control" value="{{ edit_obj.password}}></p>
                        <input type="submit" class="btn btn-info pull-right">
                    </form>
                </div>
            </div>

原文地址:https://www.cnblogs.com/binyuanxiang/p/11992848.html

时间: 2024-11-09 10:40:43

二、django简介的相关文章

Django搭建简易博客教程(01)-Django简介

a-terminal: 写作目的 喜欢一个学习观点以教促学, 一直以来, 学习的时候经常会发现, 某个方法某个问题自己已经明白了, 但是在教给别人的时候确说不清楚, 所以慢慢的学会了以教促学这种方法, 在教给别人知识的同时也能够提升自己对语言, 对框架的理解. 希望达到的目标: 希望能写出一个系列文章, 我也不知道到底能写多少 能够让认真阅读这个系列的文章的人, 能在读完之后做出一个简单的博客 希望能够加深自己对Django的理解 Django简介 Django是Python中目前风靡的Web

Django之web应用、http协议和django简介

等了好久终于等到今天,盼了好久终于把梦实现,啦啦啦.....学习python两个多月了,终于等到python的高潮,老师说要是把Django学会了,python的web开发就差不多了,也相当于迎来了python学习之路最重要一环节,也是框架中比较难的,所以也是迎来了最大难点,好高兴哦,可以上课开飞机了,太棒了!!!! 一.web应用 web应用程序是一种可以通过web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器既可,不需要安装其他软件.应用程序有两种模式C/S.B/

Django Web开发【1】Django简介

前言 看完<Django Book>之后, 总想找个实例来实战开发下,无奈国内Django的书籍相当少,只能从英文书籍中吸取养料,偶然之后得到Learning Website Development with Django这本书,感觉挺不错,虽然想着翻译,但是自身时间实在太少,只能简略的挑重点翻译下了. 原书08年的时候就出版了,所以它使用的Django版本比较低,由于自身工作的环境使用的是Django1.3.5,所以迁移过来有些代码变化也比较大. 这是我的第一篇原创博客(翻译也算不上吧),希

NFC学习笔记二——Libnfc简介与安装

一直想把自己对过的英文文章做一下翻译记录下来,趁着学习NFC,现将libnfc首页的对libnfc介绍和在不同操作系统上对libnfc安装的文章做一下翻译,一方面提高一下自己的英语,另一方面学习一下libnfc. 原文地址:http://nfc-tools.org/index.php?title=Libnfc 公共平台独立的近场通讯(NFC)库 libnfc是GNU公共许可正下发布的第一个免费的底层的NFC开发包和编程API.它对任何人事完全免费和公开的.这个列表显示了libnfc支持的功能.l

Django简介

django简介:urls.py网址入口,关联到views.py views.py处理用户发出的请求,通过渲染templates中的网页可以将显示内容,比如登陆后的用户名,用户请求的数据,输出到网页. models.py与数据库操作相关 forms.py表单templates 文件夹 admin.py后台 settings.py配置文件,比如 DEBUG 的开关,静态文件的位置等. 环境搭建:下载django和vritualenv.vritualenvwrapperpip install Dja

Django简介及Django项目的创建详述

Django简介 Django是一个开源的Web应用框架,由Python写成.但是,百度百科中讲它采用了MVC框架模式,其实这个解释不准确. 确切的讲,Django的模式是:路由控制+MTV模式.所谓的路由控制其实就是采用URL分发器,将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template.而Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同. Django的MTV分别是值: 1.M代表模型(Model

django简介,安装,文件介绍,三板斧(render,HttpResponse,redirect)HTTP协议,用socket实现简单版web框架,用wsgiref,jinja2,pymysql实现Django运行流程

1.web应用(https://www.cnblogs.com/Dominic-Ji/p/9167438.html) c/s,b/s架构c/s:客户端 服务端b/s:浏览器 服务器?   2.HTTP协议: 超文本传输协议 四大特性: 1.基于TCP/IP作用在应用层之上的协议,底层实现仍为socket 2.基于请求响应:通信一定是从客户端开始,服务器端接收到客户端一定会做出对应响应 3.无状态:协议不对任何一次通信状态和任何数据做保存 4.无连接:一次连接只完成一次请求-响应,请求-响应完毕后

1、django 简介与部署

环境: Centos 6.5 python 2.7.9 1.简介 Django是一个由 python 语言编写的开源Web应用框架,使用MVC的软件设计模式. 其架构可参考:http://www.crazyant.net/1001.html 其它部分边学习边补充 2.部署 可通过pip 直接安装: [[email protected] ~]# pip install django [root@learn-python ~]# python -c "import django; print(dja

第二章 Django框架——Django简介

二.Django的下载与基本命令 A)Django安装 方式一:命令行安装 如果下载速度慢,可以指定镜像 方式二:pycharm下settings指定版本安装 虚拟环境: a)虚拟环境入口 b)使用系统环境   c)建立venv文件夹,把本机环境拷贝一份放到里面 原文地址:https://www.cnblogs.com/neymargoal/p/9545955.html