Django_基本使用
2020-03-10 本文已影响0人
Lutous
创建项目
django-admin startproject 项目名称
- __init__.py:说明mysql_django是一个python包
- settings.py:项目的配置文件
- urls.py:进行url路由配置
- wsgi.py:web服务器和Django交互入口
- manage.py:项目管理文件
创建应用
python manage.py startapp 应用名
- __init__.py:说明目录是一个Python模块
- models.py:数据库项目的内容
- views.py:接口请求,进行处理,定义处理函数,视图函数
- tests.py:写测试代码的文件
- admin.py:网站后台管理相关的文件
建立联系
建立应用和项目之间的联系,需要修改settings.py 中的 INSTALLED_APPS配置项,对应用进行注册
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'banting', ]
ORM框架:
- Object:对象-类
- Relations:关系,关系数据库中的表
- Mapping:映射,通过类和对象操作对应的数据表
数据模型
在应用目录下models.py文件中创建数据模型
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models # 设计和表对应的类 # 艺术家类 --- 一类 class Artist(models.Model): # CharField -- 字符串 a_name = models.CharField(max_length=20) # 性别 a_gender = models.BooleanField(default=False) # DateField -- 日期类型 a_birthday = models.DateField() def __str__(self): return self.a_name.encode('utf-8') # 专辑模型类 --- 多类 class Albums(models.Model): # 专辑名称 album_name = models.CharField(max_length=20) # 备注 album_common = models.CharField(max_length=128) # 歌曲数量 album_count = models.IntegerField() # 关系属性,建立艺术及与专辑之间的一对多关系 # 关系属性对应的表的字段名格式: 关系属性名_id (h_artist_id) album_book = models.ForeignKey('Artist') def __str__(self): return self.album_name.encode('utf-8')
根据模型类生成数据表:
- 生成成迁移文件:python manage.py makemigrations
- 执行迁移生成表:python manage.py migrate
执行成功之后,项目根目录下会生成db.sqlite3数据库文件
通过模型类操作数据表
进入项目shell命令:python manage.py shell
from banting.models import Artist from datetime import date a = Artist() a.a_name='周杰伦' a.a_birthday=date(2000,1,1) a.save() # 保存 Artist.objects.get(id=1) # 查询banting_artist表中id为1的数据 a.a_birthday = date(1988,1,1) # 修改 a.delete() # 删除 ... album.album_book = a # 给关系属性赋值,值为一类的对象 Artist.objects.all() # 查询所有内容 a.albums_set.all() # 查询一类对象索关联的所有多类对象
后台管理
- 语言和时区的本地化 --- 修改settings.py文件
# LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' # TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Shanghai'
创建管理员
命令:python manage.py createsuperuser
输入账号、邮箱、密码即可创建后台管理用户
打开后台管理界面
启动服务:python manage.py runserver
在浏览器中输入:127.0.0.1:8000/admin/
注册模型
在应用下admin.py中注册模型类
from banting.models import * # 自定义模型管理类 class ArtistInfoAdmin(admin.ModelAdmin): """图书模型管理类""" list_display = ['id', 'a_name', 'a_gender', 'a_birthday'] class AlbumsInfoAdmin(admin.ModelAdmin): list_display = ['id', 'album_name', 'album_common', 'album_count'] # 注册模型类 admin.site.register(Artist, ArtistInfoAdmin) admin.site.register(Albums, AlbumsInfoAdmin)
视图
通过浏览器请求一个页面时,使用试图函数来处理这个请求,试图函数处理之后,要给浏览器返回页面内容。
- 视图函数在应用views.py文件中定义
from django.http import HttpResponse # 1.定义视图函数, HttpRequest # 2.进行url配置,建立url地址和视图的对应关系 def index(request): """进行请求处理,对M和T进行交互""" return HttpResponse("Hello Django")
- url配置过程
1、在应用目录下创建urls.py文件
2、配置项目urls.py文件# 应用urls文件 from django.conf.urls import url from banting import views urlpatterns = [ url(r'^index$', views.index), # 建立 ]
# 项目urls文件 from django.conf.urls import include urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^', include("banting.urls")), ]
浏览器中输入:127.0.0.1:8000/index,界面显示“Hello Django”
模板
创建模板文件夹
- 设置模板文件
1、项目settings.py文件配置模板路径('DIRS': [os.path.join(BASE_DIR, 'templates')],)
2、项目urls.py文件配置urlpatterns = [ url(r'^index$', views.index), url(r'^artist$', views.show_artist), url(r'^artist/(\d+)$', views.show_album), ]
- 使用模板文件
# 项目views.py def show_artist(request): """显示歌手名称""" artists = Artist.objects.all() return render(request, 'banting/show_artist.html', {'artists': artists}) def show_album(request, a_id): """显示专辑详情""" artist = Artist.objects.get(id=a_id) # 查询和artist关联的专辑信息 albums = artist.albums_set.all() return render(request, 'banting/show_album.html', {'artist': artist, 'albums': albums})
<!--show_album.html--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>显示专辑信息</title> </head> <body> <h1>{{artist.a_name}}</h1> <url> {% for music in albums %} <li>{{music.album_name}} --- {{album_.h_common}}</li> {% empty %} <li>专辑内没有歌曲信息</li> {% endfor %} </url> </body> </html>
<!--show_artist.html--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>显示艺术家信息</title> </head> <body> 艺术家信息如下: {% for artist in artists %} <li><a href="/artist/{{ artist.id }}">{{ artist.a_name }}</a></li> {% endfor %} </body> </html>
浏览器中输入:127.0.0.1:8000/artist