Django,静态文件配置

保证django能正常运行的几个注意事项

1.保证你的计算机名不能是中文
2.一个pycharm窗口就对应一个项目(工程)
3.文件路径命名尽量不要用中文
4.启动django确保端口不能重复
5.新创建的app必须在settings配置文件中注册才能生效
View Code

静态文件配置

#1、STATIC_URL = ‘/static/'    看是否已经存在,不存在添加上,一般都存在
#2、创建一个static文件夹  (放图片、css等静态相关)

3、STATICFILES_DIRS=[ os.path.join(BASE_DIR,'static') 创建文件夹路径,可以写多个

自定义登陆功能

def login(request):
    if request.method == 'GET':
        return render(request,'login.html',locals())
    elif request.method =="POST":
        #print(request.POST)
       # print(request.POST.get('name'))

后台输出:
<QueryDict: {'name': ['11'], 'pwd': ['11']}>
11

这里print(request.POST)value是一个列表
而 print(request.POST.get('name'))取列表中最后一个

#如何获取列表
#request.POST.getlist('name')
Views

django命令行创建项目

#django-admin startproject '项目名'
#创建app
#python manage.py startapp '应用名'
#启动django
#python manage.py runserver

 






---django链接mysql---


1.settings配置文件database

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lqz',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'ATOMIC_REQUEST': True,
        'OPTIONS': {
            "init_command": "SET storage_engine=MyISAM",
        }
    }
}
'''
'NAME':要连接的数据库,连接前需要创建好
'USER':连接数据库的用户名
'PASSWORD':连接数据库的密码
'HOST':连接主机,默认本机
'PORT':端口 默认3306
'ATOMIC_REQUEST': True,
设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。
是全局性的配置, 如果要对某个http请求放水(然后自定义事务),可以用non_atomic_requests修饰器 
'OPTIONS': {
             "init_command": "SET storage_engine=MyISAM",
            }
设置创建表的存储引擎为MyISAM,INNODB
View Code


2.在app下的__init__文件均可,告诉django用pymysql链接数据库而不再使用默认的mysqldb

import pymysql
pymysql.install_as_MySQLdb()



---ORM(对象关系映射)---

注意!!django-orm不能创建数据库(需要手动创建) ,只能创建表和字段


数据库迁移命令


python manage.py makemigrations 把你的更改记录记录到小本本python manage.py migrate      将你的改动操作同步到数据库

或tools---->Run manage.pk后敲
makemigrations
migrate

#只要动了models.py中类与表相关的东西,就必须得重新执行上面的两条命令


模型表增加字段

#注意:给一个已经有数据的表中添加新字段,需要设置默认值
id = models.AutoField(peimary_key=True)
name = models.CharFiled(max_length=64,default='pdun')


修改数据

#直接修改类中的字段,然后执行数据库迁移命令




模型表数据的增删改查
查:

在views中导入models
#注意!!
#如果是  from app01.models import *
#直接User.objects.all()


#1、models.User.objects.all() 
# 查询到User表中所有的数据,执行结果是一个queryset对象
只要是queryset对象就可以点.query查看当前查询出来的queryset对象内部的sql语句

#2、models.User.objects.get() # get拿出来的是数据对象本身,如果查询不存在直接报错

#3、models.User.objects.filter() # filter拿出来是queryset对象,如果查询不存在不报错只返回空

#
注意 用filter查询出来不是数据对象本身 相当于[数据对象1,数据对象2,数据对象3] # 获取数据对象本身 models.User.objects.filter().first() >>> models.User.objects.filter()[0] # queryset虽然支持索引取值,但是索引不能为负数
from django.shortcuts import render,redirect
# from app01.models import *
from app01 import models

# Create your views here.


def userlist(request):
    if request.method == 'GET':
        ret = models.User.objects.all()            #拿到所有数据传给HTML
        return render(request, 'userlist.html', {'user_list': ret})  


-------------------------------------------------------------------
<table border="1">
    <thead>
    <tr>
        <th>id</th>
        <th>name</th>
        <th>password</th>
        <th>addr</th>
        <th>编辑</th>      #添加新字段
    </tr>
    </thead>
    <tbody>
    {% for user in user_list %}     
        <tr>
            <td>{{ user.id }}</td>
            <td>{{ user.name }}</td>
            <td>{{ user.password }}</td>
            <td>{{ user.address }}</td>
            <td><a href="">删除</a></td>     #每行后添加删除按钮

        </tr>
    {% endfor %}

    </tbody>
简单的字段操作,添加删除按钮

数据增删改查

6 user的增删改查
        ***重点****:
        1 单表查询所有用户:models.User.objects.all()
            得到的是 queryset对象(当成列表),列表里面,一个一个的对象[user1,user2]
        2 render(request, 'userlist.html', {'user_list': ret})
        3 模板里:   {% for user in user_list %}
                        #要循环的内容    
                            {{user.name}}
                     {% endfor%}
        4 get请求携带参数:
            http://127.0.0.1:8000/deleteuser/?id=1
            后台取值:request.GET.get('id')
                    request.GET['id']
        5 orm删除记录 models.User.objects.filter(id=id).delete()
            返回值:影响的行数
        6 前台post提交的数据取值:name=request.POST.get('name')
        7 orm保存:
            两种方式:
            1 user=models.User.objects.create(name=name,password=pwd,address=addr)
            2 user=models.User(name=name,password=pwd,address=addr)
              user.save()
        8 orm查询单条数据:user=models.User.objects.filter(id=id).first()
        9 orm的修改 models.User.objects.filter(id=id).update(name=name,password=pwd,address=addr)
from django.shortcuts import render,redirect
from app01 import models


# Create your views here.
def userlist(request):
    if request.method == 'GET':

        ret = models.User.objects.all()
        return render(request, 'userlist.html', {'user_list': ret})


def deleteuser(request):
    if request.method == 'GET':
        id = request.GET.get('id')
        ret = models.User.objects.filter(id=id).delete()
        print(ret)
        return redirect('/userlist/')


def adduser(request):
    if request.method=='GET':
        return render(request,'adduser.html')
    elif request.method=='POST':
        name=request.POST.get('name')
        pwd=request.POST.get('password')
        addr=request.POST.get('addr')
        # 方式一
           user=models.User.objects.create(name=name,password=pwd,address=addr)
        # 方式二
        user=models.User(name=name,password=pwd,address=addr)
        user.save()
        print(user.name)
        print(type(user))
        return redirect('/userlist/')

def updateuser(request):
    if request.method=='GET':
        id=request.GET.get('id')
        user=models.User.objects.filter(id=id).first()
        return render(request,'updateuser.html',{'user':user})
    if request.method=='POST':
        id=request.POST.get('id')
        # id2=request.GET.get('id')
        # print(id)
        # print(id2)
        name=request.POST.get('name')
        pwd=request.POST.get('password')
        addr=request.POST.get('addr')
        models.User.objects.filter(id=id).update(name=name,password=pwd,address=addr)
        return redirect('/userlist/')
views.py
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table border="1">
    <thead>
    <tr>
        <th>id</th>
        <th>name</th>
        <th>password</th>
        <th>addr</th>
        <th>删除</th>
        <th>编辑</th>
    </tr>
    </thead>
    <tbody>
    {% for user in user_list %}
        <tr>
            <td>{{ user.id }}</td>
            <td>{{ user.name }}</td>
            <td>{{ user.password }}</td>
            <td>{{ user.address }}</td>
            <td><a href="/deleteuser?id={{ user.id }}">删除</a></td>
            <td><a href="/updateuser?id={{ user.id }}">编辑</a></td>
        </tr>
    {% endfor %}

    </tbody>

    <a href="/adduser/">新增用户</a>
</table>
</body>
</html>
userlist.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

#后端获取id有两种方法,一种action后边的参数,一种用hidden隐藏一个id
<form action="/updateuser/?id={{ user.id }}" method="post">
    <p><input type="hidden" name="id" value="{{ user.id }}"></p>
   

 <p>用户名: <input type="text" name="name" value="{{ user.name }}"></p>
    <p>密码: <input type="text" name="password" value="{{ user.password }}"></p>
    <p>地址: <input type="text" name="addr" value="{{ user.address }}"></p>
    <input type="submit" value="提交">

</form>
</body>
</html>
updateuser
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^userlist/', views.userlist),
    url(r'^deleteuser/', views.deleteuser),
    url(r'^adduser/', views.adduser),
    url(r'^updateuser/', views.updateuser),
]
urls
原文地址:https://www.cnblogs.com/pdun/p/10714664.html