1 django中app的概念:
大学:----------------- 项目
信息学院 ----------app01
物理学院-----------app02
****强调***:创建了app,要在配置文件中注册
...
2 模板路径配置:
1 templates文件夹 (这里面放自已写的静态文件代码)
2 settings里注册一下
3 静态文件配置:
1 静态文件配置:
settings.py
# 'django.middleware.csrf.CsrfViewMiddleware', # 大约在47行注释掉
STATIC_URL = '/static/' # 默认已有的
# 创建一个static文件夹
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
# 创建的文件夹路径(可以写多个)
]
4 完整版登录功能
小知识
get:获取数据,页面,携带数据是不重要的数据(数据量有大小限制)
post:往后台提交数据
1 login.html
***重点***1 action:提交到后台的地址三种写法:
1 http://127.0.0.1:8000/login-
2 /login/ 推荐用!!!!!!!!
3 空
method post方式 (templates目录下静态代码文件名:login.html,写在body标签里面)
注意:<input type="submit" value="提交">或<button></button> type不可以是button
<form action="http://127.0.0.1:8000/login" method="post">
<p>用户名:<input type="text" name="name" class="form-control"></p>
<p >密码:<input type="password" name="pwd" class="form-control"></p>
<input type="submit" value="提交">
</form>
2 建立与配置数据库
提前建立一个名为db1的数据库
在应用名目录下的models.py文件中:
models.py
class User(models.Model):
id=models.AutoField(primary_key=True) # primary_key=True 是为主键,AutoField:自增
name=models.CharField(max_length=32) # CharField:字符串类型,max_length=32 字符串最大长度为32
pwd=models.CharField(max_length=32)
数据库迁移
1 python3 manage.py makemigrations ----记录一下数据库的变化
2 python3 manage.py migrate ----将变化同步到数据库中
字段中写入数据,将来测试。
3 视图层:(views.py 如果在视图层已配置了连接数据库后,就不要在settings.py中设置的数据库了。)
1 request.method ----前台提交过来请求的方式
2 request.POST(相当于字典)----post形式提交过来的数据,(http请求报文的请求体重)
3 request.POST.get('name') ----推荐用get取值(取出列表最后一个值)
4 request.POST.getlist('name')-----取出列表所有的值_
5 前台get方式提交的数据,从request.GET字典里取
2 链接数据库(防止注入,推荐以下写法)
1:先在urls.py(总路由,请求地址跟视图函数的映射关系)里面增加一条路由
url(r'^login/', views.login),
2:在视图函数中写入
cur.execute('select * from user where name=%s and password=%s ',[name,pwd])
from django.shortcuts import render,HttpResponse
import pymysql
def login(request):
if request.method=='GET':
return render(request,'login.html')
elif request.method=='POST':
name=request.POST.get('name')
pwd=request.POST.get('pwd')
# 使用mysql 连接 <
conn=pymysql.connect(host='127.0.0.1',port=3306,db='db1',user='root',password='mariadb.123')
cur=conn.cursor()
# sql防注入
cur.execute('select * from user where name=%s and password=%s ',[name,pwd])
user=cur.fetchone() # 从数据库中的user 表里,只取一条数据,返回元祖类型
if user:
return HttpResponse('successful')
else:
return HttpResponse('fail')
3、render、redirect、HttpResponse作用
1 render--返回页面,默认会去templates里找,注意路径
2 redirect--重定向
3 HttpResponse -- 本质:都是返回HttpResponse的
最后访问:http://127.0.0.1:8000/login/ 测试。
5 ORM介绍与数据库配置(与上面views.py文件中的连接数据库不可重复配置,以后我们都会这种方式去学习,写在views.py链接数据库中的方式仅作了解)
1 ORM即Object Relational Mapping,全称对象关系映射。
优点:
1 不用写sql,不会sql的人也可以写程序
2 开发效率高
2 缺点:
1 可能sql的效率低
3 如何使用:
如果连接mysql:在setting.py里配置:(记得提前建立数据库)
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': 'password',
'NAME': 'dbname',
}
2 数据库配置:
在app下的__init__.py里写:
import pymysql
pymysql.install_as_MySQLdb()
3 orm创建表 (会创建app01_user的表中,字段为:id,name,pwd)
django-orm:
1 不能创建数据库(需要手动创建数据库)
2 可以创建数据表
3 可以创建字段
models.py
class User(models.Model):
id=models.AutoField(primary_key=True) # primary_key=True 是为主键,AutoField:自增
name=models.CharField(max_length=32) # CharField:字符串类型,max_length=32 字符串最大长度为32
pwd=models.CharField(max_length=32)
5 数据库迁移
1 python3 manage.py makemigrations ----记录一下数据库的变化
2 python3 manage.py migrate ----将变化同步到数据库中
转载于:https://blog.51cto.com/silencezone/2325469