Python之Django
一、Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
二、核心组件有
- 用于创建模型的对象关系映射
- 为最终用户设计的完美管理界面
- 一流的 URL 设计
- 设计者友好的模板语言
- 缓存系统。
三、因为Java的关系,所以在学习django的时候。存在很多不一样的地方,但是大部分的开发架构基本上差不多的。架构上面还是存在着一些区别的,主要的地方在于:
1、模板方式:Django:MTV,Java:MVC。其实Django和jsp柑橘差不多,都是可以嵌入其他语言开发的一中方式。
2、Django和spring的大体差异,Django有点像使用springboot做template的方式去做页面开发。目前spring更多使用restful的方式开发了,所以这里也存在一定区别
3、路由匹配规则:Django采用的是正则的方式进行逐级的解析,并且可以反解析。spring,则采用固定方式。
4、项目层级:Django以项目-->应用,spring以项目-->模块。大体上面差不多。
5、难易程度:由于语言的关系,Python在做对象管理、映射、视图管理等上面都会存在冗余的情况,而且杂乱。当然因为Python的最小单位不是class的原因导致。相比于spring的架构,以及生态,总体感觉spring更适用于对象的IOC。
6、解耦程度:从单体项目上面来说,差不多。分布式的话,应用之间的交互,springcloud,有独立的处理机制。Django的处理方式不算友好。
四、关于Django的相关配置以及说明
1、Django的安装
pip install django=='version'(不写version,默认版本)
2、常见命令:
1)创建项目
django-admin startproject 'name'
2)创建应用(进入项目目录后创建)
python manage.py startapp 'name'
3)生成迁移文件
python manage.py makemigrations
4)执行迁移文件(同步到数据库)
python manage.py migrate
5)创建管理员账户
python manage.py createsuperuser
6)运行项目
python manage.py runserver 'port'
7)shell执行
python manage.py shell
3、项目目录结构
4、文件说明:
1)settings.py(项目配置)说明:
a、debug使用配置
DEBUG = True ALLOWED_HOSTS = []
备注:如果DEBUG = False,则需要配置ALLOWED_HOSTS。["*"]为所有可以访问。
b、安装APP
新增应用加入到箭头处,箭头以上为默认。箭头为项目配置。
注意:在不使用迁移文件的时候,是可以不用配置的。如果存在使用迁移文件的情况,就必须要要配置应用。
# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.apps import AppConfig class DjangoDemoConfig(AppConfig):
name = 'django_demo'
c、中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
需要深入的自己了解一下
d、根URL配置
ROOT_URLCONF = 'd_demo.urls'
e、模板路径配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
f、数据库配置
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "django",
'USER': "root",
'PASSWORD': "root",
'HOST': "127.0.0.1",
'PORT': "",
}
}
g、认证配置
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
h、时区配置
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True
基本上,涉及的项目配置就这些。
2)urls.py(路由配置)说明:
from django.conf.urls import url, include
from django.contrib import admin urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^demo/', include("django_demo.urls", namespace="demo")),
]
说明:一般采用分模块的方式配置,目的更加细化。namespace,用于反解析
3)应用中admin.py,管理员可操作配置
# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.contrib import admin
from django_demo.models import *
# Register your models here. class RoleInline(admin.TabularInline):
# 管理员操作关联
model = Role
#数量
extra = 1 # 手动注册/装饰器也可以
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
# 管理员展示
list_display = ["id", "name", "age"]
# 过滤
list_filter = ["name"]
# 搜索字段
search_fields = ["name", "age"]
# 分页长度
list_per_page = 10
# 添加设置
fieldsets = [
("base", {"fields": ["name", "age"]}),
]
# 同时可以操作
inlines = [RoleInline] # admin.site.register(User, UserAdmin)
admin.site.register(Role)
说明:这个是建立在模型之上的,管理员可以操作的数据库模型方式。
4)应用models.py(模型)说明:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.db import models # Create your models here.
from django.db.models import Model # 模型管理器
class UserManager(models.Manager):
def get_queryset(self):
return super(UserManager, self).get_queryset().filter(data_status=True) def create(self, name, age):
user = User()
user.name = name
user.age = age
return user # 用户模型
class User(Model):
name = models.CharField(max_length=255)
age = models.IntegerField(db_column="age")
data_status = models.BooleanField(default=True)
user_manager = UserManager() # @classmethod
# def create(cls, name, age):
# user = User()
# user.name = name
# user.age = age
# return user class Meta:
db_table = "t_user"
ordering = ["-age"] class Role(Model):
name = models.CharField(max_length=255)
user = models.ForeignKey(User) class Meta:
db_table = "t_role"
说明:模型,有点像spring的orm框架,然后通过生成迁移文件,来创建数据库。
5)应用urls.py说明
from django.conf.urls import url from django_demo import views urlpatterns = [
url(r'^$', views.index),
url(r'^role/(?P<userId>\d+)$', views.role, name="role"),
url(r'^role2$', views.role2, name="role2"),
]
说明:其实可以直接在根urls中配置,为啥要区分,主要为了单应用只需要关注,自己应用的额链接即可。‘name’用于方向解析。
?P<userId>参数指定
6)应用views.py(视图)说明:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.shortcuts import render # Create your views here.
from django_demo.models import User def index(request):
# request.GET.get("key")
# request.GET.getlist("key")
# request.POST["key"]
# request.session["session"] = "sessionName"
# request.session.get("session", "no login")
# request.clear()
# request.flush()
# temp = loader.get_template("django_demo/index.html")
# return HttpResponse(temp.render())
params = {"users": User.user_manager.all()}
return render(request, "django_demo/index.html", params) def role(request, userId):
user = User.user_manager.get(pk=userId)
roles = user.role_set.all()
params = {"roles": roles}
return render(request, "django_demo/role.html", params) def role2(request):
userId = request.GET.get("userId")
user = User.user_manager.get(pk=userId)
roles = user.role_set.all()
params = {"roles": roles}
return render(request, "django_demo/role.html", params)
说明:所有的都需要request来结构参数,get可以通过路径,或者参数。post通过列表的方式获取
7)templates(模板,继承写法)
a、base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div>header</div>
<div>
{% block content %}
可以替换的地方。。。
{% endblock %}
</div>
<div>end</div>
</body>
</html>
b、index.html(注意粉色的反解析)
{% extends "django_demo/base.html" %}
{% block content %}
{% for user in users %}
<div>
<span>姓名:</span><a href="role/{{ user.id }}">{{ user.name }}</a>
<span>姓名:</span><a href="{% url 'demo:role2' %}?userId={{ user.id }}">{{ user.name }}</a>
<span>年龄:{{ user.age }}</span>
</div>
{% endfor %}
{% endblock %}
c、role.html
{% extends "django_demo/base.html" %}
{% block content %}
{% for role in roles %}
<div>
<span>角色名称:{{ role.name }}</span>
</div>
{% endfor %}
{% endblock %}
d、404.html用于不是DEBUG的时候
五、上面的基本上就是Django的全部配置和开发节奏了。我这里只是简单的介绍一下这里的项目结构。如果存在错误或者不合理的地方,请留言说明。
六、实例源码:https://github.com/lilin409546297/django_demo.git
Python之Django的更多相关文章
- [Python] 利用Django进行Web开发系列(一)
1 写在前面 在没有接触互联网这个行业的时候,我就一直很好奇网站是怎么构建的.现在虽然从事互联网相关的工作,但是也一直没有接触过Web开发之类的东西,但是兴趣终归还是要有的,而且是需要自己动手去实践的 ...
- [Python] 利用Django进行Web开发系列(二)
1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...
- VIM for Python and Django Development
VIM for Python and Django Development VIM-PyDjango created by Programmer for Programmer who work on ...
- Window环境下Python和Django的安装
转载地址:http://blog.csdn.net/haoni123321/article/details/7593821 1.下载python,本文使用python-2.7.2.msi 2.下载dj ...
- Python和Django在Windows上的环境搭建
作为一个.NET程序员,真心不喜欢Python以及PHP这种松散的语法.有人说,程序员应该多学几门语言,本想学习Java,无奈感觉Java的语法太啰嗦了.很多人都推荐Python,说它的语法简洁,执行 ...
- 【Python】django安装
官方下载:https://www.djangoproject.com/download/ 报错 [root@test Django-]# python setup.py install Traceba ...
- Python和Django的Third Libraby分类汇总
这些第三方包与Python和Django一起构成了强大的生态系统,自己在开发时大大减小工作难度和工作量, 这些包基本上能满足我们的大部分需求.人与人的差距,其中一点是你知道的比他多,这样你就能大大提高 ...
- 用Python和Django实现多用户博客系统(二)——UUBlog
这次又更新了一大部分功能,这次以app的形式来开发. 增加博客分类功能:博客关注.推荐功能(ajax实现) 增加二级频道功能 更多功能看截图及源码,现在还不完善,大家先将就着看.如果大家有哪些功能觉的 ...
- Django中国|Django中文社区——python、django爱好者交流社区
Django中国致力于成为Python和Django框架等技术的中文开发者学习交流平台. 内容涵盖python教程.python基础.Django教程.python入门.web.py教程.linux教 ...
- Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决
今人不见古时月,今月曾经照古人.生命是如此的美丽与短暂! 学习Python已经两个月了,Python的语法通过做简单的语法题和看Python语法介绍,有了初步的了解.但上班还是要做别的事情,所以感觉学 ...
随机推荐
- open jdk性能与稳定性测试比较(转载)
因为oracle jdk从jdk8u201之后就不提供免费下载了,所以最近在看openjdk的分支实现,网上搜了下,有下列选择和比较(我们目前主要在跑的是open jdk,不少人推荐的zulu ope ...
- Mac OS -bash: psql: command not found 使用 psql 命令报错
使用 psql 在 mac os 系统上登录,系统显示没有 psql 这个命令存在 解决方法如下: 将 postgresql 的 bin 目录添加到环境变量中即可 export PATH=" ...
- functools.partial偏函数的使用
https://docs.python.org/3.6/library/functools.html 从名字可以看出,该函数的作用就是部分使用某个函数,即冻结住某个函数的某些参数,让它们保证为某个值, ...
- Django架站的16堂課
Django架站的16堂課-活用Django+Web+Framework快速构建移动网站 目录 第1堂 网站开发环境的建立 1 1.1 网站的基础知识 1 1.1.1 网站的运行流程 1 1.1.2 ...
- Flink FileSink 自定义输出路径——StreamingFileSink、BucketingSink 和 StreamingFileSink简单比较
接上篇:Flink FileSink 自定义输出路径——BucketingSink 上篇使用BucketingSink 实现了自定义输出路径,现在来看看 StreamingFileSink( 据说是S ...
- Python扫描器-端口扫描
结合渗透测试最常见就是单个域名扫指纹,自动子域名查找.获取所有子域名的IP,自动C段IP查找相同子域名,利用有效IP扫端口. 常见端口库扫描 service_list = { 21:"FTP ...
- Python爬虫-爬取豆瓣图书Top250
豆瓣网站很人性化,对于新手爬虫比较友好,没有如果调低爬取频率,不用担心会被封 IP.但也不要太频繁爬取. 涉及知识点:requests.html.xpath.csv 一.准备工作 需要安装reques ...
- 最新 上海轻轻java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.上海轻轻等10家互联网公司的校招Offer,因为某些自身原因最终选择了上海轻轻.6.7月主要是做系统复习.项目复盘.Leet ...
- Linux 缺少 mime.types 文件 mailcap
问题描述: 一个项目当中使用的是 ossfs 挂载的一个 oss,在系统上传附件时,比如图片或视频时, 它的头信息为,application/octet-stream,上传后直接为二进制文件,访问的话 ...
- CMS之promotion failed&concurrent mode failure
原文链接:https://www.jianshu.com/p/ca1b0d4107c5 CMS并行GC收集器是大多数JAVA服务应用的最佳选择,然而, CMS并不是完美的,在使用CMS的过程中会产生2 ...