Django 第二篇

1.路由访问服务器不带斜杠,内部开始找不到路径,
内部会返回一个带斜杠的路由给浏览器,浏览器再次
携带那个带斜杠的路由再次访问服务器,简称自动重定向加斜杠路由。
所有的html文件默认都写在templates文件夹下

所有的静态文件(css,js,前端第三方类库)默认都放在static文件夹下

html页面引入外部资源的方式
    cdn
    本地

 

form表单触发提交数据的动作两种方式
    1.<input type="submit">
    2.<button></button>
form提交数据的地址如何指定及方式?
    action属性控制提交的地址
    方式:
        1.全路径
            <form action="http://127.0.0.1:8000/login/">
        2.只写路径后缀
            <form action="/login/">
        3.不写 (默认往当前路径提交)
    form表单默认是get请求
1.request.method:获取提交数据的方式,GET或者POST
request.POST:获取post提交的数据
request.GET :获取GET提交的数据

例如<request.POST: QueryDict:
{'username': ['jason'], 'password': ['123']} >

 request.POST.get('username')=jason,想要获取values
中的全部数据用getlist(),value是一个列表,但是get出来确实
一个元素,而且默认取出列表里面的最后一个元素
djangol链接数据库
1.需要修改配置文件,django默认链接自己的db.sqlite3
我们把那个改成mysql,k键全部改成大写。
2.告诉Django用pymysql替换它默认的数据库
方式1,在项目文件夹下面的init或者应用文件下的init
固定写法;

import pymysql
pymysql.install_as_MySQLdb()告诉django用pymysql代替mysqldb连接数据库
orm
1.django的ORM不能主动创建库,要你自己手动创建库,orm会帮你创建表
数据库迁移命令
python3 manage.py makemigrations  
将你的数据库变动记录到一个小本本上(并不会帮你创建表)
python3 manage.py migrate 
将你的数据库变动正在同步到数据库
PS:每动一次数据库,必须执行这两条命令
新增数据
方法1.
user_obj = models.User.objects.create(name=username,password=password)
方法2.
user_obj = models.User(name=username,password=password)
user_obj.save()  # 对象调用save方法保存到数据库
查询数据
user_list = models.User.objects.all()  # 获取user表所有的数据
PS:这里的user_list是一个列表,里面是QuerySet对象,可以query
查看SQL语句,只有QuerySet对象才可以点query。
user_obj = models.User.objects.filter(id=edit_id).first() 
这是一个数据对象,获得的是一个数据对象列表,可以索引取值
first是取第一个对象,filter当条件不存在的情况下会返回一个空的queryset对象

user_obj = models.User.objects.get(id=edit_id)
get也可以获取数据对象,但查询条件不存在会报错,filter不会报错
获取对象id的获取方式
方式1:利用input隐藏一个标签
<input type="hidden" name="edit_id" value="{{ user_obj.pk }}">
方式2:
<form action="/edit/?edit_id={{ user_obj.pk }}" method="post">
重定向  可以写别人的网址也可以是自己的路径
return redirect('/userlist')
return redirect(www.baudu.com)
利用a标签href属性 可以指定页面跳转的路径  
href可以写全路径 但是推荐写后缀即可
<a href="/reg/" class="btn btn-success">添加数据</a>

# 注意 路径的书写一定要加斜杠
数据删除
models.User.objects.filter(id=1).delete()  
# 会将queryset所有的数据对象全部删除
更新数据
方法1
models.User.objects.filter(id=edit_id).update(name=username,password=password)
方法2
user_obj = models.User.objects.filter(id=edit_id).first()
user_obj.name = username
user_obj.save()
推荐使用第一种
对表的操作
增加字段,直接写就行,删除字段直接注释,
ps,只要动了那个class 就要执行两天数据库迁移命令
使得orm映射成功
创建类
1.id字段可以不写,默认帮你创建主键id字段
2.一对多字段的建立,外键建立在多的那一方,
例如;publish=models.ForeignKey(to='publish')
意思就是将表与publish表关联,publish可以不带引号
但是必须写在关联表的下面,推荐使用带引号
3.多对多外键建立在关联的两张表中随意一张都行,推荐建在
查询频率高的那张表,且多对多字段不会出现在建立表的字段中
而且,数据库里的表会自动帮你补全id,所以不要多此一举

猜你喜欢

转载自www.cnblogs.com/jingandyuer/p/10986680.html