Django框架入门

Django框架入门

HTTP协议

  • 四大特性

    • 基于TCP/IP协议之上作用于应用层的协议
    • 基于请求响应
    • 无状态
    • 无连接
  • 请求响应的数据格式
    • 请求格式

      请求首行
      请求头
      \r\n
      请求体(在这个地方区分get请求与post请求;get请求无请求体)
    • 响应格式
      响应首行
      响应头
      \r\n
      响应体
  • 状态码:
    • 1XX:服务器已接收到请求正在处理,可以继续发送请求
    • 2XX:响应成功 例如:200
    • 3XX:一般为重定向 例如:304
    • 4XX:请求错误 常见的有: 403(不满足请求条件,拒绝访问),404(资源不存在)
    • 5XX:一般为服务器内部错误

动静态页面

并不是说页面“动”与“不动”的区别,而是页面与服务器有没有数据上的交互

Django返回的三板斧

  1. HttpResponse:返回字符串
  2. render:请求转发
  3. redirect:重定向

Django配置静态文件

通常情况下会将静态文件(js、css、图片、字体等)存放在 /static 文件夹下

settings.py 中添加STATICFILES_DIRS=[

? os.path.join(BASE_DIR,‘static‘)

]

这个时候你的静态文件就配置好了

在你的前端页面应用js或css的时候只要以 /static/ 开头就可以引用静态文件

或者是使用模板语言的方法来动态解析:

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

都说Django是一个Web框架,那么我们就来剖析下Web框架为我们做了那些事情

  • 与浏览器进行交互

    import socket
    
    server = socket.socket()
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    while True:
        con, addr = server.accept()
        data = con.recv(1024)    # 接收客户端数据
        print(data.decode())    # 打印客户端数据
        con.send(b"HTTP/1.1 200 OK\r\n\r\n")    # 按照HTTP协议的格式响应
        con.send(b"Hello World!")    # 响应内容
        con.close()
  • 将html代码发送给客户端
    import socket
    
    server = socket.socket()
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    while True:
        con, addr = server.accept()
        data = con.recv(1024)
        print(data.decode())
        con.send(b"HTTP/1.1 200 OK\r\n\r\n")
        con.send(b"""
        <html>
            <head>
                <title>Title</title>
            </head>
            <body>
                <h1>Hello World!</h1>
            </body>
        </html>
        """)
        con.close()

有以上的两个功能(接收浏览器发来的数据,给浏览器发送数据)就可以说是一个最简单的Web服务器,就是这么简单。

安装django

pip install django

注意事项:
  1. 计算机名称不能有中文
  2. 项目名尽量不要有中文

使用命令行创建Django项目

  • 创建Django项目:

    django-admin startproject 项目名
  • 启动Django项目:
    python manage.py runserver
  • 创建应用app:
    python manage.py startapp 应用名

使用pycharm创建Django项目与使用命令行创建Django项目的区别

  1. 使用命令行创建Django项目不会帮你创建templates文件夹,不会替你配置templates文件夹的路径
  2. 使用命令行创建不会帮你注册app应用,虽然pycharm会帮你注册应用,但是只会在创建第一个应用时会帮你注册

Django的post请求问题

当我们通过post请求请求服务器资源时会被服务器拒绝报一个403的错误。

这是因为Django的默认开启防止csrf(跨站点请求伪造)攻击

解决办法:

  1. 将setting.py 文件中的MIDDLEWARE中的django.middleware.csrf.CsrfViewMiddleware语句注释掉
  2. from django.views.decorators.csrf import csrf_exempt
    
    #在处理函数上加装饰器,使本次请求忽略csrf校验
    @csrf_exempt
    def post(request):
         name=request.post['name']
         return HttpResponse('welcome!{}'.format(name))
  3. 可以在form表单中添加{% csrf_token %}随着表单的提交而一起提交

通过request对象获取前端数据

  • 请求方式:method

    request.method   # 这个会返回GET或POST
  • 获取前端携带的数据
    • get请求

      data = request.GET
    • post请求
      data = request.POST

Django连接本地数据库

  • 第一步:配置数据库

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  # 指定数据库
            'NAME': 'lx',  # 使用的数据库
            'USER':'root',  # 用户名
            'PASSWORD':'root',  # 密码
            'HOST':'127.0.0.1',   # 地址
            'PORT':3306,  # 端口号
            'CHARSET':'utf8'  # 指定编码格式
        }
    }

    如果我们只是配置了下数据库的话那么我们的程序还是会报错-_-

  • 第二步:配置连接时使用的模块

    因为Django默认是使用MySQLdb来连接数据库,但是很不幸它不支持3.X的版本

    这个时候我们就要告诉Django使用pymysql来连接数据库使用

    这里有两种方法:

    • 第一种是在与项目名同名的文件夹里的 __init__.py 文件中添加两行语句

      import pymysql
      pymysql.install_as_MySQLdb()
    • 第二种方法与第一种方法一样,只不过是在app应用里面的 __init__.py 文件夹中加入上面的两句话
    • 其实还有第三种方法,你可以装一个mysqlclient模块来代替mysqldb

Django的ORM简介

orm对象关系映射
    类                   数据库的表

    对象                 表的记录

    对象获取属性           记录的某个字段对应的值
优点与缺点
  • 优点:能够让一个不会数据库操作的人,也能够简单快捷去使用数据库
  • 缺点:由于封装程度太高,可能会导致程序的执行效率偏低,需要结合项目需求,手写sql语句
注意事项:

? django的orm不会自动帮你创建库,库需要你自己手动创建表会自动帮你创建

? 你只需要书写符合django的orm语法的代码即可

通过orm创建

去应用下所在的models.py中书写类

from django.db import models

# Create your models here.
class Userinfo(models.Model):
    # 设置id字段为userinfo表的主键,相当于SQL语句中的 id int primary key auto_increment
    id = models.AutoField(primary_key=True)  # 在django中你可以不指定主键字段django orm会自动给你当前表新建一个名为id的主键字段
    # 设置username字段  username varchar(64)  CharField必须要指定max_length参数
    username = models.CharField(max_length=64)  # 在django orm中没有char字段,但是django允许自定义char字段
    # 设置password字段  password int
    password = models.IntegerField()
  • 不会创建表,而是生成一个记录 ,将你当前的操作记录下来(记录到migrations文件夹)
python manage.py makemigrations
  • 将你的orm语句真正的迁移到(同步)到数据库中

    python manage.py migrate

注:只要你在models.py中修改了跟数据库相关的代码 你就 必须 重新开始执行上面两条命令

数据库表字段的 增删改 都可以通过models中的类来修改数据表对应的字段

ORM的简单运用——增删改查

  • from 应用名 import models
    user_list = models.类.objects.get(id=1)  # 但是这个方法如果没有查询到数据就会报错
    user_list = models.类.objects.filter(id=1) # 这个方法不会报错,如果是两个条件及以上条件间是以and连接
    user_list = models.类.objects.all()  # 获取数据表的全部数据
  • from 应用名 import models
    user_obj = models.类(id=0, username='gredae', password=123)
    user_obj.save()  # 保存到数据库中
    user_obj = models.类.objects.create(id=0, username='gredae',password=123)  # 也是创建一条记录
  • from 应用名 import models
    # 修改单条记录
    user_obj = models.类.objects.filter(id=1)
    user_obj.username = '戈达尔'
    user_obj.save()
    # 修改多条记录
    user_list = models.类.objects.filter(id__lt=5)
    row = user_obj.update(username='gredae')
  • from 应用名 import models
    # 删除单条语句
    user_obj = models.类.objects.filter(id=1)
    user_obj.delete()  # 会立即删除并且没有返回值
    # 删除多条语句
    user_list = models.类.objects.filter(id__lt=5)
    row = user_obj.delete()
    # 程序员必备技能
    models.objects.all().delete()

原文地址:https://www.cnblogs.com/Gredae/p/11756181.html

时间: 2024-10-30 21:04:59

Django框架入门的相关文章

[Python] Django框架入门

说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ./manager.py xxx 准备:已经安装python并加入环境变量 已安装 django 设计框架对比(引用,可自行搜索): 1.MVC MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model,主要用于对数据库的封装 v表示

[Python] Django框架入门5——静态文件、中间件、上传图片和分页

说明: 本文主要描述Django其他的内容,涉及静态文件处理.中间件.上传文件.分页等. 开发环境:win10.Python3.5.Django1.10. 一.静态文件处理 在Django项目的静态文件主要指的是css.js和图片等文件. 1.配置静态文件 在settings.py文件中配置静态内容: STATIC_URL:在html文件中使用的路径,如:"/static/images/logo.png". STATICFILES_DIRS:指静态文件在项目的存放位置. 2.新建目录

python之路(18)django框架入门

前言 Django框架下的views,templates views视图函数的属性方法 http下有两个核心类:HttpResquest类和HttpResponse类 requesr request.path : 当前url访问的路径 request.get_full_path() : url带参数的全路径 request.method : 返回请求的方式,即GET或POST request.POST.get("") / GET.get("") : 得到value

Django 框架入门

1.创建虚拟环境.(如果你想在你的服务器中运行多个项目,那么装虚拟环境是最好的选择) pip install virtualenv pip install virtualenvwrapper 安装好后, 创建一个虚拟环境,mkvirtualenv -p python3 py3_django 报错,mkvirtualenv 不是command,我们添加环境变量 vi /root/.bashrc 将 export WORKON_HOME=$HOME/.virtualenvs source /usr/

Python开发之Django框架入门(1)Django安装

Django是一个python类库,使用前必须安装好python.推荐使用Python3,支持python2.7的最新Django版本为1.11LTS. 一.安装方式: 使用pip命令安装. pip install Django==2.1      (此命令可以指定安装版本) pip install Django               (此命令安装最新版本) 使用pip卸载旧的版本 How to get Django Django is available open-source unde

[Python] Django框架入门3——深入视图

说明: 本文主要深入了解视图(views.py),涉及路由配置.定义视图.Request对象.Response对象.状态保持等. 一.路由配置 1.配置位置(settings.py 的 ROOT_URLCONF) 在settings.py中的ROOT_URLCONF指向的urls.py则是主要的路由配置文件. 2.修改主路由文件(test2.urls) 1 from django.conf.urls import url, include 2 from django.contrib import

Django -- 安装入门

关于Django的学习,我主要依据的两个地址,希望可以和大家分享: http://www.runoob.com/django/django-install.html http://djangobook.py3k.cn/2.0/ ------------------------------------------------------------------------------------------------- [入门简介] web开发激动人心且富于创造性,同时也繁琐令人生厌:pytho

Django之入门 CMDB系统 (二) 前端模板

Django之入门 CMDB系统 (二) 前端模板 前言 作者: 何全,github地址: https://github.com/××× QQ交流群: ××× 通过此教程完成从零入门,能够独立编写一个简单的CMDB系统. 目前主流的方法开发方式,分为2种:mvc 和 mvvc方式.本教程为 mvc 方式,即 django负责渲染html.后面会推出 mvvc(前后端分离)的入门教程. 教程项目地址: https://github.com/×××/husky/ 教程文档地址: https://gi

Django之入门 CMDB系统 (一) 基础环境

Django之入门 CMDB系统 (一) 基础环境 前言 作者: 何全,github地址: https://github.com/××× QQ交流群: 62-01-76-50-1 通过此教程完成从零入门,能够独立编写一个简单的CMDB系统. 目前主流的方法开发方式,分为2种:mvc 和 mvvc方式.本教程为 mvc 方式,即 django负责渲染html.后面会推出 mvvc(前后端分离)的入门教程. 教程项目地址: https://github.com/×××/husky/ 教程文档地址: