Python 第五阶段 学习记录之---Django 基础

Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。

基本配置

一、创建django程序

  • 终端命令:django-admin startproject sitename
  • IDE创建Django程序时,本质上都是自动执行上述命令

其他常用命令:

  python manage.py runserver 0.0.0.0
  python manage.py startapp appname
  python manage.py syncdb
  python manage.py makemigrations
  python manage.py migrate

  python manage.py createsuperuser

二、程序目录

三、配置文件

1、数据库

 1 DATABASES = {
 2     ‘default‘: {
 3     ‘ENGINE‘: ‘django.db.backends.mysql‘,
 4     ‘NAME‘:‘dbname‘,
 5     ‘USER‘: ‘root‘,
 6     ‘PASSWORD‘: ‘xxx‘,
 7     ‘HOST‘: ‘‘,
 8     ‘PORT‘: ‘‘,
 9     }
10 }

# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替

# 如下设置放置的与project同名的配置的 __init__.py文件中

import pymysql

pymysql.install_as_MySQLdb() 

2、模版

TEMPLATE_DIRS = (

        os.path.join(BASE_DIR,‘templates‘),

    )

3、静态文件

STATICFILES_DIRS = (

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

    )

路由系统

1、单一路由对应

url(r‘^index$‘, views.index),

2、基于正则的路由

1 url(r‘^index/(\d*)‘, views.index),
2 url(r‘^manage/(?P<name>\w*)/(?P<id>\d*)‘, views.manage),

3、添加额外的参数

url(r‘^manage/(?P<name>\w*)‘, views.manage,{‘id‘:333}),

4、为路由映射设置名称

url(r‘^home‘, views.home, name=‘h1‘),
url(r‘^index/(\d*)‘, views.index, name=‘h2‘),

设置名称之后,可以在不同的地方调用,如:

  • 模板中使用生成URL     {% url ‘h2‘ 2012 %}
  • 函数中使用生成URL     reverse(‘h2‘, args=(2012,))      路径:django.urls.reverse
  • Model中使用获取URL  自定义get_absolute_url() 方法

class NewType(models.Model):
    caption = models.CharField(max_length=16)

    def get_absolute_url(self):
        """
        为每个对象生成一个URL
        应用:在对象列表中生成查看详细的URL,使用此方法即可!!!
        :return:
        """
        # return ‘/%s/%s‘ % (self._meta.db_table, self.id)
        # 或
        from django.urls import reverse
        return reverse(‘NewType.Detail‘, kwargs={‘nid‘: self.id})

获取请求匹配成功的URL信息:request.resolver_match

5、根据app对路由规则进行分类

url(r‘^web/‘,include(‘web.urls‘)), 分发

6、命名空间

a. project.urls.py

from django.conf.urls import url,include

urlpatterns = [
    url(r‘^a/‘, include(‘app01.urls‘, namespace=‘author-polls‘)),
    url(r‘^b/‘, include(‘app01.urls‘, namespace=‘publisher-polls‘)),
]

b. app01.urls.py

from django.conf.urls import url
from app01 import views

app_name = ‘app01‘
urlpatterns = [
    url(r‘^(?P<pk>\d+)/$‘, views.detail, name=‘detail‘)
]

c. app01.views.py

def detail(request, pk):
    print(request.resolver_match)
    return HttpResponse(pk)

以上定义带命名空间的url之后,使用name生成URL时候,应该如下:

  • v = reverse(‘app01:detail‘, kwargs={‘pk‘:11})
  • {% url ‘app01:detail‘ pk=12 pp=99 %}

django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。

通过反射机制,为django开发一套动态的路由系统Demo: 下载

模板

时间: 2024-11-08 23:44:55

Python 第五阶段 学习记录之---Django 基础的相关文章

Python 第五阶段 学习记录之--- Web框架

什么是web服务器的原理是什么 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hell

Python 第五阶段 学习记录之----rabbmit

消息服务器rabbmit RabbitMQ 消息队列 python里有两个Q, threading queue.不同线程间数据交互 进程Queue: 不同进程间交互这个说法是错误的. 这个是用于父进程与子进程间交互.或者同属于同一父进程下多个子进程进行交互. 两个python程序的进程间是无法通信的. 各个独立进程间通信: QQ 要发送消息给 world.1.通过socket,这个需要自己去写很多东西(沾包.收到的是什么需要返回的又是什么--) .2.消息队列, 那两个不同的程序要通信.两台机器

Python 第八阶段 学习记录之---算法

算法(Algorithm): 一个计算过程, 解决问题的方法 1.递归的两个特点 - 调用自身 - 结束条件 时间复杂度 - 时间复杂度是用来估计算法运行时间的一个式子(单位) - 一般来说,时间复杂度高的算法比复杂度低的算法快空间复杂度 用来评估算法内存占用大小的一个式子 列表查找: 从列表中查找指定元素 输入:无序 输出:有序顺序查找: 从列表第一个元素开始,顺序进行搜索,直到找到为止. 二分查找: 从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区

关于在学习python爬虫时的学习记录

最近学习python3爬虫,看的是这位博主的博客,不得不说,是真的厉害,通俗易懂^?_?^ 我要学习的还有很多-从基本的python知识,我就被难倒了- 哎,记录下我的盲点- 花了近一个钟头测试出来的结果. 在爬取相关的html时,text ≠ text[0] 后者是正确的.我一直以为不加的效果也是一样的结果,在我理解看来就是从头开始的,即从0到尾的所有相关的内容,实际上我的理解与相关的python基础不谋而和,可能是爬虫就需要如此的?我就默认好了- 在python中的方法后面的()是不可省去的

Python学习之旅—Django基础

前言  前段时间业务比较繁忙,没时间更新博客,从这周开始将继续为各位更新博客.本次分享的主题是Django的基础部分,涵盖Django MTV三部分,并通过一个简单的班级管理系统来说明如何使用Django进行开发,好啦,开始今天的主题吧! 一.浅谈MVC.MTV和MVVM 要学习Django,我们很有必要了解下MVC,MTV和MVVM三种模式. [001]MVC MVC(Model View Controller 模型-视图-控制器)是一种Web架构的模式(本文不讨论桌面应用的MVC),它把业务

Python第五周 学习笔记(1)

高阶函数 First Class Object 函数也是对象,可调用的对象 函数可以作为普通变量.参数.返回值等等 数学概念 y=g(f(x)) 在数学和计算机科学中,高阶函数应当是至少满足下面一个条件的函数 接受一个或多个函数作为参数 输出一个函数 内建高阶函数 sorted(iterable[, key][, reverse]) 排序 filter(function, iterable) --> filter object 过滤数据 map(func, *iterables) --> ma

python+selenium+unittest+pageobject学习记录(一)

学习selenium已经一个月了,简单概括一下学习的步骤,方便以后回忆. 一. 自动化测试的一些概念 1.分层的自动化测试:unit-->service-->UI 2.什么样的项目时候自动化测试:软件需求变动不频繁:项目周期较长:自动化测试脚本可复用 3.如何学习UI自动化测试:编程语言:Selenium API:单元测试框架 二. 测试环境搭建 1.安装python:安装python,配置环境变量 2.安装Selenium:pip install selenium 3.浏览器驱动:http:

python的第一天学习记录

1.变量无需声明直接赋值. 2.one_name的第二次赋值并不影响其"WeiWang"的值已经传给two_name,所以,one_name获得新值,two_name仍旧是开始的值. 3.ASCII码值--英文1bytes:1980年GB2312--7XXX个汉字:1995年GBK1.0--2万多个汉字:2000年GB18030--2万7千多个汉字: unicode--都是2bytes;utf-8,英文1bytes,中文3bytes. 4.字符串的格式化输出,以下三种方式,还有用&qu

python开发微信支付学习记录(转)

前言 微信支付是由微信及财付通联合推出的移动支付创新产品.如今,随着微信支付的全面开放,相关需求也越来越多,很多开发人员进行微信支付开发及商家申请微信支付时,面临着诸多疑惑. 要想开发顺利进行,首先要对业务流程有个清晰的认识.这里以微信公众号支付为例,因此也借用微信支付官方文档中的业务流程图: 接下来来关注几个开发过程中的关键点,包括: 1.生成商户订单与调用统一下单 API 2.微信服务器交互的数据格式 3.公众号支付下网页内通过 JS-API 调起支付 4.异步通知商户支付结果(回调) 一.