Django创建项目应用基础操作及部分后端渲染

一、创建项目

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('/')              #出错后重定向到首页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值