学习Django

Django基础

https://docs.djangoproject.com/zh-hans/2.0/

安装Django

pip install django==2.0

# 下载比较慢的同学可以换个源下载
pip install django==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

创建项目

django-admin startproject mysite

# 创建虚拟环境
cd mysite
python -m venv venv

目录结构

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
  • manage.py

    管理django项目的命令行工具, manage.py就是django-admin, 只是他们有以下区别

    • django-admin会被加入到环境变量当中, 所以我们可以在任意目录下调用.
    • manage.py只能在该项目下使用.
  • mysite(项目名)

    实际业务逻辑编写, 项目配置, 路由管理的地方.

    • __init__.py

      Python将当前目录识别为一个包.

    • settings.py

      项目的配置文件.

    • wsgi.py

      web server gateway interface web服务网关接口.

      wsgi只是一个协议, 它确立了两个规范:

      • 我们可以在服务器下开启多个web服务应用, 确定客户端请求如何到达服务应用的规范.
      • 服务应用如何把处理的结果返回.

启动项目

  • 创建一个应用

    创建的应用才是真正处理请求和编写业务逻辑的地方.

    python manage.py startapp polls
    
  • 启动项目

    # 5000为指定的端口, 不指定端口默认为8000
    python manage.py runserver 5000
    

MTV模型

  • Model

    django提供了一个抽象的模型层, 目的是为了构建和操纵当前web应用的数据.

    简单地说, model层就是用来和数据库进行交互的.

    django最出名的就是它的orm

    • orm

      object relation mapping 对象关系映射

      orm自动地根据对象在数据库中进行操作. orm使得我们不用去操心数据表的建立和修改, 数据的CRUD, 只关心逻辑层的处理

  • Template

    View将数据传递给模板层进行渲染, 之后将渲染好的页面返回到客户端.

    模板层提供了一个对设计者友好的语法用于渲染向用户呈现的信息.

    类似PPT模板

  • View

    视图层, 负责处理用户的请求并返回响应.
    模板层进行渲染, 之后将渲染好的页面返回到客户端.

    模板层提供了一个对设计者友好的语法用于渲染向用户呈现的信息.

    类似PPT模板

  • View

    视图层, 负责处理用户的请求并返回响应.

https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial01/

创建视图

  • 视图就是处理客户端请求的地方views.py

    def index(request):
        """
        request 就是作为参数传递进来的请求对象
        :param request:
        :return: HttpResponse 处理完请求的返回对象
        """
        return HttpResponse("Hello world. You're at the polls index.")
    
  • 解决不同请求调用不同的处理方法, 需要通过路由

    • 创建应用的路径管理

      from django.urls import path
      from . import views
      
      urlpatterns = [
          path('', views.index, name='index'),
      ]
      
    • 将应用的路径管理添加到全局配置当中

      from django.urls import path, include
      
      urlpatterns = [
          path('polls/', include("polls.urls")),
      ]
      

创建模型

  • 数据库配置settings.py

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'polls',
            'USER': 'root',
            'PASSWORD': 'qwe369',
            'HOST': '127.0.0.1',
            'PORT': '3306'
        }
    }
    
    • 修改连接数据库的客户端mysite\__init__.py

      import pymysql
      
      pymysql.install_as_MySQLdb()
      
  • 初始化数据库

    • 新建数据库polls

    • 完成第一次迁移, 生成初始的管理表

      python manage.py migrate
      
  • 创建模型

    from django.db import models
    
    # Create your models here.
    
    
    class Question(models.Model):
        question_text = models.CharField(max_length=200)
        pub_data = models.DateTimeField('date published')
    
    
    class Choice(models.Model):
        question = models.ForeignKey(Question, on_delete=models.CASCADE)
        choice_text = models.CharField(max_length=200)
        votes = models.IntegerField(default=0)
    
    
  • 激活模型

    • 激活APPsettings.py

      INSTALLED_APPS = [
          'polls.apps.PollsConfig',
          'django.contrib.admin',
          'django.contrib.auth',
      	...
      ]
      
    • 同步本地模型修改(类似git commit)

      python manage.py makemigrations 应用名
      
      • 会在当前应用migrations目录下生成响应的记录文件
    • 正式进行数据库同步

      python manage.py migrate
      

管理后台

  • 创建管理员

    python manage.py createsuperuser
    
  • 向管理页面加入投票应用

    from django.contrib import admin
    
    # Register your models here.
    from .models import Question
    
    admin.site.register(Question)
    

遇到修改后模板文件没有变化的情况, 要想到去清除浏览器缓存.

视图层返回类型

  • 简单文本
  • 文件
    • html
    • css
    • js
    • 视频文件, 音频文件
  • JSON数据格式

路由配置

  • URL匹配

    path('<int:question_id>/', views.detail, name='detail'),
    
    • int表示类型
    • question_id表示传递的参数名
  • URL配置

    • ROOT_URLCONF

      设置主URL配置文件.

模板

def index(request):
    """
    request 就是作为参数传递进来的请求对象
    :param request:
    :return: HttpResponse 处理完请求的返回对象
    """
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {
        'latest_question_list': latest_question_list,
    }
    return render(request, 'polls/index.html', context)

重定向

  • 当需要对用户不同的操作做不同结果的渲染时, 需要用到重定向. 可以简单理解为当前网址自动帮你跳转到另外一个网址.

    return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
    

通用视图

通用视图将常见的模式抽象化,可以使你在编写应用时甚至不需要编写Python代码。

通用视图也是未来我们学习restful api的雏形.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值