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

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

<!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>

<!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>

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), ]