一、创建项目
1.django-admin startproject 项目名
2.配置虚拟环境 File -->Settings --> Project ‘项目名’ -->Project Interpreter
–>Location: ‘项目名的绝对路径’\venv
3.配置依赖项 django 2.2.12 -->Terminal -->pip install django==2.2.12 pymysql
4.生成依赖项清单文件 pip freeze > requirment.txt
社区版pycharm: 右上Edit Configurations–>删除原来的配置–>重新添加python配置
5.选择执行脚本路径\manage.py–>Parameters:runserver
二、创建应用
1.django-admin startapp 应用名
(python manage…py startapp 应用名)
.2.添加应用名到配置中 settings.py —>INSTALLED_APPS —> 输入’‘应用名’’,
3.配置数据库 --> DATABASES -->格式参考官方文档,上方CTRL+鼠标左键
pymysql 运行报错,配置看 视频6.创建模型
三、编写视图函数
1.点开views.py -编写视图函数(即接受来自浏览器的请求,给用户以响应)
from django.http import HttpRequest,HttpResponse
def show_index(request:HttpRequest):
content = ' ... '
return HttpResponse(content)
信息多的时候使用HttpResponse操作会相对繁琐,此处引用render函数,用于渲染页面返回完整的响应体
return render(request,index.html',{'subject':queryset})
–>将搜索的信息queryset以字典形式存入subject, 返回index.html
html的for循环会用到
四、配置URL
使用视图函数需要配置URL映射 ( 请求的路由 ) —> 点开 urls.py
URL 即(统一资源定位符)相对路径----> 指引显示到哪个界面 ----> path
path(‘hello/’,show_index), —>域名加/hello 即显示show_index视图函数
五、前端渲染和后端渲染
真正的项目开发中,前端工程师会提空静态页面,如何让静态页面上呈现动态内容
方法一(前段渲染 —>在浏览器中国完成渲染操作) : 前段通过Ajax 请求获得后端提供的数据,用数据渲染页面
方法二(后端渲染 —>在服务器端用Python程序完成 ) : 把前段提供的静态页面改造成模板页, 把动态内容换成占位符,待会通过python程序
python程序把动态内容填入,直接把静态页处理成动态页
六、编写、配置、渲染模板页
<ul id="...">
{% for ... in ... %}
</ul>
TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS':[os.path.join(BASE_DIR, 'templates'),] #配置DIRS路径
'APP_DIRS':True,
....
}]
七、运行Django项目
python manage.py runserver
八、Django框架中内置了ORM功能
–ORM : 对象关系映射 Object-Relational Mapping
Python程序 ----> 关系型数据库
对象模型 ------对象持久化到数据库------> 关系模型
对象模型 -------从数据库中获取数据------> 关系模型
打开应用的models.py
class Subject(models.Model)
a = models.AutoField(primary_key=True) #在subject类中添加属性a为主键
#注意:若添加autofield列又不设为主键的话会报错
b = models.CharField(max_length=200)
class Meta:
db_table = 'tb_subject' #数据库中的表和类中的表对应
九、通过模型创建表(正向工程),表创建模型(反向工程)
1.Terminal–>python manage.py makemigrations 应用名 #生成迁移,往数据库创建表
python manage.py migrate 应用名 #执行迁移 只生成django_migrations(用于记录迁移状况和tb_subject(所需表) 若python manage.py migrate (不写应用名) 则执行所有没有执行过的 迁移
2.在终端–>python manage.py shell (进入交互式环境)
–>from 应用名.models import 类名 (导入信息)
–>创建对象 ** = 类名(属性1=’ ‘,属性2=’ ',属性3= ’ ’ )
—>**.save
为了更方便可进入另一个交互式环境 ipython
类名.object.get( 属性= ?) -->拿属性为?的对象
查找不知道是否存在属性为?的对象,用filter, get会报错
#删除
a = 类名.objects.fliter(no=20) ---->a.delete #查找出属性no为20的对象并删除
十、新建一个文件夹存放静态资源(图片,视频,音频)
1.windows文件夹直接拷贝到pycharm里新建的文件夹中
2.配置静态资源目录—>点开settings.py—>找到STATIC_URL = ’ 静态文件的绝对路径’
–>添加一行代码 STATICFILES_DIRS = [os.path.join(BASE_DIR,‘static’), ]
3.回到html,图片路径需添加文件夹前缀
<img src="imgs/hot-icon-small.png">
×
<img src="/static/imges/hot-icon-small.png">
√
十一、编辑admin.py直接对数据进行增删改查
1.打开admin.py
2. 引入类 from … import 类名
admin.site.register(类名) 即可显示英文类
3. 回到models.py–>在class Meta下—> verbose_name = ‘中文类名’
verbose_name_plural = ‘中文类名复数形式’
为了方便管理模型,可在admin.py下建一个模型管理类,
如:
class SubjectAdmin(admin.ModelAdmin):
list_display = ( 'no','name', 'intro' , 'is_hot') #展示属性信息
search_fields = ('name',) #添加搜索框,根据name搜索
ordering = ('no' , ) #no升序展示, '-no'降序展示
admin.site.register(Subject,SubjectAdmin)
十二、若项目中有几个类,通过一个类查找另一个类
1.可在被查找类中添加关联,比如通过学科查询老师
class Teacher(models.model):
.....
.....
subject = models.ForeignKey(to=Subject,on_delete=model.PROTECT)
to=需要关联的类,当学科里还有老师的时候不能删除,可指定在数据库中对应列的名字,默认为subject_id,可改db_column=‘sno’
#多对一关系 ForeignKey(一个学科对应多个老师)
#一对一关系 OneToOneField
#多对多关系 ManyToManyField
2.关联后的表无法显示name属性,此时应在class Subject下添加
def __str__(self):
return self.name #通过str魔术方法返回name
#或者同时显示其他属性
return f'{self.no} : {self.name}'
3.配置teacher的url请求后,修改html实现通过学科查看到老师,
学科处设立超链接
<a href="/teacher/?sno={{ subject.no}}">{{ subject.name }} </a>
"?“即点击这个超链接的时候传入一个参数,参数名为sno,参数值为{{subject.no}}
这种参数称为"URL参数"或"查询参数”.
4.通过前端获取sno的值,再传到teacher的视图函数,通俗理解为前端告诉查什么后端才处理什么数据.
点开view.py
def show_teacher(request):
sno = int(request.GET.get('sno' , '0') #可写request.GET['sno']但如果sno不存在则报错
querySet = Teacher.objects.filter(subject=sno)
try:
sno = int(request.GET['sno'])
.....同上.....
except(KeyError,ValueError):
return('/') #出错后重定向到首页