Erlo

python web框架Django入门

时间:2019-10-09 14:02   阅读:19次   来源:博客园
页面报错
点赞

Django 简介

背景及介绍

Web 框架简单,易学易上手,但是自己要着手处理很多问题。 框架复杂,学习周期稍长,但是很多问题框架已经处理或屏蔽。

  • 同类框架---> tornado flask

  • 2005年面世, 目前比较成熟的版本:1.10.1,支持python2.7、3.4、3.5

Django 架构设计

Django是一个基于MVC构造的框架。不过在Django中、控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。

MVC

MVT

Django 工作机制

  1. 用manage .py runserver 启动Django服务器时就载入了在同一目录下的settings .py。该文件包含了项目中的配置信息,如前面讲的URLConf等,其中最重要的配置就是ROOT_URLCONF,它告诉Django哪个Python模块应该用作本站的URLConf,默认的是urls.py

  2. 当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf。

  3. 然后按顺序逐个匹配URLConf里的URLpatterns。如果找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常是request)

  4. 最后该view函数负责返回一个HttpResponse对象。

Django特点

学习资料

1.入门

1.1搭建开发环境

Windows创建虚拟环境

import django
django.VERSION
(1, 10, 1, u'final', 0)

django.get_version()
'1.11'

Django 项目搭建

命令行方式

创建项目

新建APP

修改显示中文、中国时区

命令行启动Djange项目

数据库配置

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.mysql',
       'NAME': 'inner_manage',
       'USER':'root',
       'PASSWORD':'toor',
       'HOST':'127.0.0.1',
       'PORT':'3306'
    }
}

需要安装mysqlclient(虚拟环境下安装):pip install mysqlclient

如果安装不成功,需要进行源码安装:去官网下载类似于mysqlclient-1.4.4-cp37-cp37m-win32.whl这样的源码文件。

安装也是在虚拟环境下安装,进入虚拟环境,转到源码文件的目录下安装,pip install mysqlclient-1.4.4-cp37-cp37m-win32.whl

pycharm方式

pycharm创建的项目有诸多限制,建议使用命令行创建项目和app。采用pycharm进行编辑和开发。

pycharm安装

创建项目

项目配置

项目运行

System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
November 06, 2018 - 14:01:10
Django version 1.10.1, using settings 'SQLT.settings'
Starting development server at http://127.0.0.1:8081/
Quit the server with CTRL-BREAK.

Django项目的访问流程

 

 

1.2定义模型

设计介绍

数据库配置

创建应用

python manage.py startapp goods

定义模型类

from django.db import models

class TypeInfo(models.Model):
  tname = models.CharField(max_length=20,verbose_name='分类名称')
  tadd_date = models.DateTimeField()
  def _ _str_ _(self):
      return "%d" % self.pk

class GoodsInfo(models.Model):
  gname...
  gprice...
  gdetail...
  isDelete...
  gtype = models.ForeignKey(TypeInfo,on_delete=models.CASCADE)# 级联删除
  def __str__(self):
      return self.gname

生成数据表

python manage.py makemigrations
python manage.py migrate

测试数据操作

python manage.py shell
from booktest.models import BookInfo,HeroInfo
from django.utils import timezone
from datetime import *
TypeInfo.objects.all()
t = TypeInfo()
t.tname="图书"
t.badd_date=datetime(year=1990,month=1,day=10)
t.save()
t=TypeInfo.objects.get(pk=1)
t
t.id
t.tname
t.tname="零食"
t.save()
t.delete()

关联对象的操作

g=GoodsInfo()
g.gname='开心果'
g.hprice=100
g.gdetail='开开心心'
g.gtype=t
g.save()
t.goodsinfo_set.all()
g=t.goodsinfo_set.create(gname='碧根果',gprice=100,gdetail='好吃不上火')

1.3使用后台管理

管理操作

使用django的管理

python manage.py createsuperuser,按提示输入用户名、邮箱、密码

管理界面本地化

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

向admin注册goods相关的模型

from django.contrib import admin
from models import TypeInfo,GoodsInfo
# 注册方式如下:
admin.site.register(TypeInfo)
admin.site.register(GoodsInfo)

自定义管理页面

class GoodsInfoAdmin(admin.ModelAdmin):
    ...
# 注册方式如下:
admin.site.register(GoodsInfo,GoodsInfoAdmin)
列表页属性
list_display = ['pk', 'gname', 'gprice']
list_filter = ['gname']
search_fields = ['gname']
list_per_page = 10
添加、修改页属性
fields = ['gname', 'gprice']
fieldsets = [
    ('basic',{'fields': ['gname']}),
    ('more', {'fields': ['gprice']}),
]

关联对象

from django.contrib import admin
from models import TypeInfo,GoodsInfo

class GoodsInfoInline(admin.StackedInline):
    model = GoodsInfo
    extra = 2

class TypeInfoAdmin(admin.ModelAdmin):
    inlines = [GoodsInfoInline]

admin.site.register(TypeInfo, TypeInfoAdmin)
class GoodsInfoInline(admin.TabularInline)

布尔值的显示

models.py模型类中定义
def gender(self):
    if self.hgender:
        return '男'
    else:
        return '女'
gender.short_description = '性别'
class HeroInfoAdmin(admin.ModelAdmin):
    list_display = ['id', 'hname', 'gender', 'hcontent']

1.4视图

from django.http import HttpResponse

def index(request):
    return HttpResponse("index")
def detail(request,id):
    return HttpResponse("detail %s" % id)

URLconf

url(r'^', include('goods.urls')),
from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^$', views.index),
    url(r'^([0-9]+)/$', views.detail),
]

1.5模板

'DIRS': [os.path.join(BASE_DIR, 'templates')],
{{输出值,可以是变量,也可以是对象.属性}}
{%执行代码段%}

定义index.html模板

<!DOCTYPE html>
<ht
            
        

相关推荐

提交留言

评论留言

还没有评论留言,赶紧来抢楼吧~~

Erlo大厅()

* 这里是“吐槽厅”,所有人可看,只保留当天信息。

  • Erlo.vip2019-10-24 02:28:47Hello、欢迎使用吐槽厅,这里是个吐槽的地方。
  • 返回顶部