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

基本配置

一、创建django程序

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

其他常用的命令:

  • python manage.py runserver 8080  启动
  • python manage.py startapp appname  创建app
  • python manage.py syncbd
  • python manage.py makemigrations 创建表格
  • python manage.py migrate
  • python manage.py create superuser 创建后台管理员

二、程序目录

三、配置文件

settings.py中

1.数据库

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME':'dbname','USER': 'root','PASSWORD': 'xxx','HOST': '','PORT': '',}
}

# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替# 如下设置放置的与project同名的配置的 __init__.py文件中import pymysql
pymysql.install_as_MySQLdb() 

View Code

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.基于正则的路由

url(r'^index/(\d*)', views.index),
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 reversereturn reverse('NewType.Detail', kwargs={'nid': self.id})

View Code

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

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

url(r'^web/',include('web.urls')),

6.命名空间

a. project.urls.py

from django.conf.urls import url,includeurlpatterns = [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 viewsapp_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请求做一条路由映射,从而是路由系统变得简洁。

路由系统

1、模版的执行

模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

def current_datetime(request):now = datetime.datetime.now()html = "<html><body>It is now %s.</body></html>" % nowreturn HttpResponse(html)

View Code

from django import template
t = template.Template('My name is {{ name }}.')
c = template.Context({'name': 'Adrian'})
print(t.render(c))

View Code

import datetime
from django import template
import DjangoDemo.settingsnow = datetime.datetime.now()
fp = open(settings.BASE_DIR+'/templates/Home/Index.html')
t = template.Template(fp.read())
fp.close()
html = t.render(template.Context({'current_date': now}))
return HttpResponse(html)

View Code

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetimedef current_datetime(request):now = datetime.datetime.now()t = get_template('current_datetime.html')html = t.render(Context({'current_date': now}))return HttpResponse(html)

View Code

return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))

View Code

2、模版的语言

模板中也有自己的语言,该语言可以实现数据展示

  • {{ item }}
  • {% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}

  forloop.counter
  forloop.first
  forloop.last

  • {% if ordered_warranty %}  {% else %} {% endif %}
  • 母板:{% block title %}{% endblock %}
  • 子板:{% extends "base.html" %}

   {% block title %}{% endblock %}

  • 帮助方法:

{{ item.event_start|date:"Y-m-d H:i:s"}}
{{ bio|truncatewords:"30" }}
{{ my_list|first|upper }}
{{ name|lower }}

3、自定义simple_tag

a、在app中创建templatetags模块

b、创建任意 .py 文件,如:xx.py

#!/usr/bin/env python
#coding:utf-8
from django import template
from django.utils.safestring import mark_saferegister = template.Library()@register.simple_tag
def my_simple_time(v1,v2,v3):return  v1 + v2 + v3@register.simple_tag
def my_input(id,arg):result = "<input type='text' id='%s' class='%s' />" %(id,arg,)return mark_safe(result)

View Code

c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名

{% load xx %}

d、使用simple_tag

{% my_simple_time 1 2 3%}
{% my_input 'id_username' 'hide'%}

e、在settings中配置当前app,不然django无法找到自定义的simple_tag

INSTALLED_APPS = ('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01',
)

中间件

django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件

MIDDLEWARE_CLASSES = ('django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.auth.middleware.SessionAuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware','django.middleware.security.SecurityMiddleware',
)

中间件中可以定义四个方法,分别是:

  • process_request(self,request)
  • process_view(self, request, callback, callback_args, callback_kwargs)
  • process_template_response(self,request,response)
  • process_exception(self, request, exception)
  • process_response(self, request, response)

以上方法的返回值可以是None和HttpResonse对象,如果是None,则继续按照django定义的规则向下执行,如果是HttpResonse对象,则直接将该对象返回给用户。

admin

django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查,而使用django admin 则需要以下步骤:

  • 创建后台管理员
  • 配置url
  • 注册和配置django admin后台管理页面

1、创建后台管理员

python manage.py createsuperuser

2、配置后台管理url

url(r'^admin/', admin.site.urls),

3、注册和配置django admin 后台管理页面

a、在admin中执行如下配置

from django.contrib import adminfrom app01 import  modelsadmin.site.register(models.UserType)
admin.site.register(models.UserInfo)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)

View Code

b、设置数据表名称

class UserType(models.Model):name = models.CharField(max_length=50)class Meta:verbose_name = '用户类型'verbose_name_plural = '用户类型'

View Code

c、打开表之后,设定默认显示,需要在model中作如下配置

class UserType(models.Model):name = models.CharField(max_length=50)def __str__(self):return self.name

View Code

from django.contrib import adminfrom app01 import  modelsclass UserInfoAdmin(admin.ModelAdmin):list_display = ('username', 'password', 'email')admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)

View Code

d、为数据表添加搜索功能

from django.contrib import adminfrom app01 import  modelsclass UserInfoAdmin(admin.ModelAdmin):list_display = ('username', 'password', 'email')search_fields = ('username', 'email')admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)

View Code

e、添加快速过滤

from django.contrib import adminfrom app01 import  modelsclass UserInfoAdmin(admin.ModelAdmin):list_display = ('username', 'password', 'email')search_fields = ('username', 'email')list_filter = ('username', 'email')admin.site.register(models.UserType)
admin.site.register(models.UserInfo,UserInfoAdmin)
admin.site.register(models.UserGroup)
admin.site.register(models.Asset)

View Code

转载于:https://www.cnblogs.com/Young111/p/9719150.html

小试牛刀之Django相关推荐

  1. django ajax页面加载,Python Django 之 基于JQUERY的AJAX 登录页面

    解决Dropbox无法连接的问题 同步共享服务Dropbox从6月18日开始再次遭到封锁,原因是DNS污染.Dropbox上次在2010年5月曾遭到IP封锁和网址关键字过 滤,2012年5月除文件外链 ...

  2. 转载:Django之Form组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 + View C ...

  3. django基础篇01-环境的搭建和项目的创建

    本文参考自银角大王的博客 基本配置 常用命令: django-admin startproject xxx(项目名) python3 manage.py startapp xxx(app名) pyth ...

  4. Django启航(四)Django配置数据库

    文章目录 Django启航(四)Django配置数据库与测试 1. 基础配置 1.1 打开之前的项目 1.2 安装pymysql 1.3 配置settings文件 1.4 引入pymysql 2. 测 ...

  5. 【精华】【学以致用】Django精华总结

    为什么80%的码农都做不了架构师?>>>    简单入门和梳理 1.WEB框架 MVC         Model       View       Controller       ...

  6. 一篇文章浅析Django Form组件相关知识

    击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 灭烛怜光满,披衣觉露滋. 前言 在上 ...

  7. Django学习之路(一)--初识django

    1.先创建虚拟环境 为什么要创建虚拟环境呢? 你有两个项目同时进行,一个需要pytnon3.9和Django3.x版本的,一个需要python3.7和Django2.x版本的,不进行环境隔离的话,运行 ...

  8. django自带的分页功能

    django自带的分页功能 django中自带的分页功能有缺陷,但是也是一种思路,所以在下做一个整理,方便以后使用,还有服务各位小伙伴. django视图部分的代码.(注释才是重点) from dja ...

  9. django正反向查询

    django正反向查询 当我们的表存在外键想要从一找多的时候该怎么查找,当我们从多找一的时候又应该怎么查找. 一找多 首先我们要创建一个项目,在项目的model.py中创建两个模型. from dja ...

最新文章

  1. spring boot 启动不连接数据库
  2. Linux查找文件内容
  3. PHP如何防采集方法代码
  4. 规则引擎集成接口(九)Java类对象
  5. 深度学习(二十六)Network In Network学习笔记
  6. 东软软件动态生成对数据表更新操作的方法
  7. C语言和设计模式(桥接模式)
  8. 使用 logback + slf4j 进行日志记录
  9. 小米商城项目解析(完)
  10. 每天00:00,MySQL定时弹出一个taskeng.exe
  11. mysql建表语句转hive sql
  12. How to extract datafiles from asm diskgroup?
  13. SSH和SSM对比(学完后的总结)
  14. Linux上的Redis客户端软件G-dis3
  15. 网络编程——CS模型(总结)
  16. scrapy简单示例
  17. 一种基于扩展反电动势的永磁同步电机无位置控制算法,全部C语言 编写,含有矢量控制大部分功能(弱磁,解耦,过调制,死区补偿等)
  18. Pytest之fixture中的参数传递
  19. defined but not used [-Wunused-function] 使用 __attribute__((unused)) 告诉编译器忽略此告警
  20. php tp5 cms,thinkphpcms

热门文章

  1. script 录制终端会话
  2. 用C#开发网络防火墙技术分析
  3. iOS - iOS 适配
  4. scala言语基础学习八
  5. mysql的一主多从和双主浅析
  6. 详解Oracle介质恢复的内部过程
  7. 关于while 和if
  8. 基于角色的权限设计(二)
  9. 57条经验之谈 转载(非常不错,我收藏了)
  10. 柳传志大声对iphone说:这是在中国!