Django's connection Mysql

 

Log function

1. Access Route internal slash if not redirected automatically add routes slash

 

All html files are written in the default templates folder
All static files (css, js, front-end third-party libraries) are placed in static default folder
html page the way the introduction of external resources
    cdn
    local

Static configuration file

The need for configuration settings in the file before using a static file

Exposure to the outside world can still access the server folder all the resources below

= STATIC_URL ' / xxx / '   # name prefix with an interface that relationship your static folders are not 
# default folder name prefix, like static file the case! ! ! 
# Static file configuration 
STATICFILES_DIRS = [
    os.path.join (base_dir, ' static ' ),   # is your static folder path 
    os.path.join (base_dir, ' static1 ' ),
    os.path.join(BASE_DIR,'static2')
]
# PS: Find words will be followed by a list of all of the static files to find the path to stop immediately return a 404 not found

form表单触发提交数据的动作两种方式

<input type="submit">
<button></button>

form提交数据的地址如何指定及方式?

action属性控制提交的地址
    方式:
1.全路径
<form action="http://127.0.0.1:8000/login/">
2.只写路径后缀
<form action="/login/">
3.不写 (默认往当前路径提交)
form表单默认是get请求

views逻辑判断

根据客户端请求方式的不同执行不同的逻辑代码
    def login(request):
        # 获取用户端提交的请求方式
        print(request.method)  # 拿到的请求方式是全大写的字符串
        if request.method == 'GET':
            return render(request,'login.html')
        elif request.method == 'POST':
            return HttpResponse("收到了 老弟")
    
    个人建议按照下面这种方式书写 减少代码冗余及结构混乱的问题
    def login(request):
        if request.method == 'POST':
            return HttpResponse('OK')
        return render(request,'login.html')
def login(request):
    # 获取用户端提交的请求方式
    print(request.method)  # 拿到的请求方式是全大写的字符串
    # if request.method == 'GET':
    #     return render(request,'login.html')
    # elif request.method == 'POST':
    #     return HttpResponse("收到了 老弟")
    if request.method == 'POST':
        print(request.POST)  # 你就把它当成一个大字典里面存放了客户端post提交的所有的数据
        # request.POST:< QueryDict: {'username': ['jason'], 'password': ['123']} >
        print(request.POST.get('username'))  # value虽然是个列表但是获取value的时候拿到却是单个元素
        # 默认只会取value列表里面的最后一个元素
        # request.POST:<QueryDict: {'username': ['jason', 'egon'], 'password': ['123']}>
        print(request.POST.getlist('username'))  # 要想一次性获取value列表里面所有的数据需要用getlist()
        # ['jason', 'egon']
        print(request.POST['password'])  # 不推荐使用该方法获取数据
        return HttpResponse('OK')
    return render(request,'login.html')
    
    获取value列表里面所有的元素需要使用getlist  应用场景:用户的爱好 多选框
    get只会获取到value列表的最后一个元素
    
    
    
    print(request.GET)  # <QueryDict: {'username': ['jason'], 'password': ['123']}>
    request.GET.get('user')  
    # <QueryDict: {'username': ['jason','egon'], 'password': ['123']}>
    request.GET.getlist('username')

django连接数据库

1.需要修改配置文件

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day54',
        'HOST':'127.0.0.1',
        'PORT':3306,
        'USER':'root',
        'PASSWORD':'123'
    }
}
ps:键必须都是大写

2.告诉django用pymysql替换它默认mysqldb模块连接数据库

方式1:在你的项目文件夹下面的__init__.py
方式2:也可以在你的应用文件夹下面的__init__.py

# 固定写法
import pymysql
pymysql.install_as_MySQLdb()  # 告诉django用pymysql代替mysqldb连接数据库

什么是ORM?

对象关系映射
类            》》》  表
对象           》》》  表记录
对象的属性  》》》 一条记录某个字段对应的值

django的orm不能够自动帮你创建库,但是可以自动帮你创建表

提示:一个django项目就使用一个库,不要多个django项目使用一个库

数据库迁移(同步)命令(******)

python3 manage.py makemigrations  将你的数据库变动记录到一个小本本上(并不会帮你创建表)
python3 manage.py migrate         将你的数据库变动正在同步到数据库中

新增数据

# 操作数据库user表插入数据
# 方式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表所有的数据
# 只要是QuerySet就可以点query查看获取到当前QuerySet对象的内部sql语句
print(user_list.query) 

利用a标签href属性 可以指定页面跳转的路径  href可以写全路径 但是推荐写后缀即可
<a href="/reg/" class="btn btn-success">添加数据</a>
# 注意 路径的书写一定要加斜杠

重定向  可以写别人的网址也可以是自己的路径
return redirect('/userlist')
return redirect('/userlist/')

queryset对象支持索引取值 但是不推荐你使用  推荐使用自带的.first()帮你获取第一条数据

删除数据

models.User.objects.filter(id=1).delete()  # 会将queryset所有的数据对象全部删除
查询数据需要注意的是你获取到的到底是一个queryset还是一个数据对象
user_query = models.User.objects.filter(id=edit_id).first()  # 如果你是要获取数据对象first千万别忘了
# filter当条件不存在的情况下会返回一个空的queryset对象
<QuerySet []> <class 'django.db.models.query.QuerySet'>

user_obj = models.User.objects.get(id=edit_id)  # 用get可以直接获取到数据对象本身但是查询条件不存在的情况下直接报错

编辑对象的id的获取方式

方式1:利用input隐藏一个标签
<input type="hidden" name="edit_id" value="{{ user_obj.pk }}">
方式2:
<form action="/edit/?edit_id={{ user_obj.pk }}" method="post">

修改数据

注意: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()


修改模型层里面的跟表相关的所有的数据,只要你修改了就必须重新执行数据库迁移命令

外键字段名 orm会自动在字段名后面加_id.无论你的字段名有没有_id

 

Guess you like

Origin www.cnblogs.com/zhengyuli/p/10992514.html