日常学习笔记 -django

视图就是对应网址的操作和显示
render返回的是 模板 HttpResponse返回的是 响应


视图里的函数 参数第一个为request 后续的相当于 /a/b/c 的形式 对应于url里的url(r'/(\d+)/(\d+)')里的这些子组 
即是说输入的网址 .../3/4 3和4作为参数传入视图里对应的函数后 作为request 后续的参数
request.GET 为获取网址的输入参数 ?key=val 以字典的形式




reverse函数 接受urls.py 里的url里的name作为第一个参数 加上对应name的视图函数所需要的参数 会返回一个地址 u'/add/3/4/'
故在我们需要更改网址的时候 不用大动干戈去把template里的模板等也更改
如果我们要把/add/3/4 改为/new_add/3/4 
只需在templates里的模板中用到该网址的地方 
<a href="/add/3/4"></a> 改为 
<a href = "{% url '需要的name' 参数 %}"></a> 注意这里的url
这样功能(视图)不变 对应的网址url已经改变


在settings.py里添加app的name才能有路径可以找到对应app的templates的文件夹


render的使用
一个template对象可以使用render函数和context类来进行渲染  context对象一般为字典形式
使用render的时候,Django 会自动找到 INSTALLED_APPS 中列出的各个 app 下的 templates 中的文件
在视图里 render(request,模板(*.html),context对象(字典))因为在这里是用于返回 没有template对象所以第一个参数要用request


模板文件.html 里 {% for ... %}{% endfor %} if这些也是一样的{{ 变量名 }}
变量的用{{}} 有功能的用{% %}{%  end %} {{}}表示可替换的
这里的也是 if elif 
模板文件.html 里的{% for %}里有forloop.last 等变量 


forloop.counter 索引从 1 开始算
forloop.counter0 索引从 0 开始算
forloop.revcounter 索引从最大长度到 1
forloop.revcounter0 索引从最大长度到 0
forloop.first 当遍历的元素为第一项时为真
forloop.last 当遍历的元素为最后一项时为真
forloop.parentloop 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop




若是我们想要在多个模板都可以共用同一个变量 那就需要上下文渲染器 一个模板中的变量我们直接用 render(request,'*.html',一个字典)
而上下文渲染器 其实就是函数返回字典 用request函数返回字典
在模板里用{{ request.变量}}
上下文渲染器 *.py 他要添加到settings.py 里
其实 就是让它变成这个project 默认的变量












与数据库有关的代码一般都在models.py里
新建的类 继承于models.Model 每个类相当于数据库里的一份表
类名.objects.create 类名.objects.get 分别为创建和查询 创建方法也可以跟类实例的用法一样 但是要加个 实例.save() 保存
获取除了objects.get() 还有 objects.all()返回的是类似列表形式
Author.objects.get_or_create(name="WeizhongTu", email="tuweizhong@163.com")
尝试获取,不存在就创建 返回值(object, True/False)


objects.filter() 用来选择满足要求的
objects.exclude() 则是选择过滤的
Queryset 的意思是查询 queryset api 是指一些可用于查询的内置函数之类




 Fields 的学习
foreignkey 外键 多个表中 a表设置某字段为主键,则b表可设计同样的字段作为外键 与a表关联


ForeignKey,ManyToManyField与OneToOneField分别在Model中定义多对一,多对多,一对一关系。
例如,一本书由一家出版社出版,一家出版社可以出版很多书。一本书由多个作者合写,一个作者可以写很多书。
pub=models.ForeignKey(Publisher) authors=models.ManyToManyField(Author)
记得models.py修改完后 
要用 python manage.py makemigrations 和 python manage.py migrate


可以用add添加键


random.randrange ([start,] stop [,step]) 返回其中的一个随机数
str.split(str1,num) str1为分隔符,num为分割次数
range(a,b) 不包括b 因为经常会不记得


print str(Author.objects.all().query)
打印执行的sql语句


Author.objects.values_list('a','b') 选择作者的a和b
只需要 1 个字段,可以指定 flat=True
Author.objects.values_list('name', flat=True) 不加的话默认两个 即后面有逗号
values_list元祖形式
values 字典形式
order_by 用于排序 ex:*.objects.all().order_by()


python 3.X 的字符串的表示方法可以通过 from __future__ import unicode_literals 来导入 '' 的字符串都为unicode b''才为str


 
@的用法
def f1():
    pass
@f1
def f2():
    pass
@f1 等价于 f2 = f1(f2()) 然后直接覆盖掉后续对f2的定义




annotate(count=Count('str')) 中的Count需要 from django.db.models import Count
计算哪个的数目就用哪个模型 
比如计算文章数那就选择Article.objects.all().values('author_id')....
由于是计算作者的文章数 故values里就用作者id


查询是可以跨表查询的 不过字符串又要求
比如在Article 里查找作者名称 因为Article里只有author author_id 没有跟名字有关的

所以在查询名字的时候会到author的表里查找 查找时要写为'author__name' 双下划线


查询中 用select_related(‘另一张表’) 即可一次性查询两张表 这样在后续的操作中就不需要重复访问数据库


注意select_related(‘’)只可用于多对一的其中一方 即一篇文章就一个作者 反之如果用作者关联文章则不行


要用多对一 多对多 要用prefetch_related()



用prefetch_related和不用的区别




defer和only的使用


注意 defer only和filter exclude之间的区别 


defer only 筛选的是键 filter和exclude筛选的是值


注意:sql查询必须包含主键


后台部分 (修改admin.py)

写完models.py后 修改 admin.py


这样在 admin后台里会有Article这个表

在models.py里修改类的 def __unicode__(self):return self.title 可以让后台更人性化


添加类 class ArticleAdmin(admin.ModelAdmin) 用以显示其他需要显示的Field (因为上面的结果只显示文章title这一个Field)list_display用来配置需要显示的field

记住后面需要注册 admin.site.register(Article,ArticleAdmin)


注意:后台功能还很多 需要重新在深入学习



表单学习

views.py中的修改 添加了两个视图 首页index和add add是通过get的方法获取a和b 再响应 对应输入的网址应该是add/?a=b=


urls.py的修改 


index.html的内容 用的是get方法 提交到的网址是/add/ 因为是get 所以会把参数加到网址后面 这里的input里的name 即是视图函数里reques.GET获取的key
















Python-Django-Vue项目实战是一种常见的全栈发模式,结合了Python的Django框架和Vue.js前端框架。下面是一个简单的介绍: Python-Django是一个强大的Web开发框架,它使用Python语言编写,提供了一系列的工具和库来简化Web应用程序的开发过程。Django具有高度的可扩展性和灵活性,可以帮助开发者快速构建功能丰富的Web应用。 Vue.js是一个流行的JavaScript前端框架,它专注于构建用户界面。Vue.js具有简单易学的语法和强大的功能,可以帮助开发者构建交互性强、响应迅速的前端应用。 在Python-Django-Vue项目实战中,通常会将Django作为后端框架来处理数据逻辑和业务逻辑,而Vue.js则负责前端页面的展示和用户交互。通过这种方式,可以实现前后端分离,提高开发效率和代码可维护性。 具体的项目实战可以包括以下内容: 1. 构建Django后端:使用Django框架创建后端应用程序,包括定义数据模型、编写视图函数、配置URL路由等。 2. 开发Vue前端:使用Vue.js框架创建前端应用程序,包括设计页面布局、编写组件、处理用户交互等。 3. 数据交互:通过RESTful API或GraphQL等方式,实现前后端数据的交互和通信。 4. 用户认证和权限管理:实现用户注册、登录、权限验证等功能,确保系统的安全性。 5. 数据库操作:使用Django的ORM(对象关系映射)来进行数据库操作,包括增删改查等。 6. 页面美化和响应式设计:使用CSS和Vue.js的样式绑定功能,实现页面的美化和响应式设计。 7. 部署和发布:将项目部署到服务器上,并进行性能优化和安全加固。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值