django和mysql

首先在Navicat Premium中新建连接rem

在rem中创建一个db_liwangdong数据库,并关闭该数据库

在dbs虚拟环境中,dbs_code文件下执行

1
2
3
django-admin startproject connect
cd connect
python manage.py startapp c

这样就创建好了django项目

在小connect文件夹中的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
__init__.py文件中
添加
import pymysql
pymysql.install_as_MySQLdb()

settings.py文件中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'c',
]
添加app名称,也就是'c'
同时填写DATABASES中数据库的相关信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_liwangdong',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
同时在末尾STATIC_URL = '/static/'处加入

STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]

在总connect文件夹中
加入文件夹templates用来存放html,加入static文件夹存放img,js,css
在小connect文件夹中的setting.py
添加import os
并在其中的TEMPLATES的DIRS加入os.path.join(BASE_DIR,'templates')

在STATIC_URL = '/static/'末尾加入
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]

在templates中新建list.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
番剧列表<hr>
<br>
{% for i in anime %}
{{i.0}}---
{{i.1}}---
{{i.2}}
<br>
{% endfor %}
</body>
</html>

在templates中新建index.html,用来显示登录按钮Login

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>请点击Login进行B站用户登录</h1>
<a href="/login/">Login</a> <!--这个用来实现跳转-->
</body>
</html>

在templates中新建login.html,用来显示index.html跳转后的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form method="post" action="/login/">
{%csrf_token%}
user:<input type="text" name="user">
pwd:<input type="password" name="pwd">
<input type="submit" value="登录">
</form>
</body>
</html>

在c中的views.py中,写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from django.http import HttpResponse
from django.shortcuts import render, redirect
#render 返回页面内容(渲染变量到模板中),并且没有发送第二次请求
#redirect 发送了第二次请求,是个跳转函数,而且会返回302的状态码

from django.db import connection

def list(request):
cur1 = connection.cursor()
cur1.execute('select * from anime')
rows = cur1.fetchall()
# for row in rows:
# print(row)
tmp = {
'anime':rows
}
return render(request,'list.html',context=tmp)

def index(request):
return render(request,'index.html')

def login(request):
if request.method=='POST':
user=request.POST.get('user')
pwd=request.POST.get('pwd')
cur2 = connection.cursor()
sql = "select pwd from users where user='"+user+"'"
cur2.execute(sql)
i = cur2.fetchone()
if int(i[0]) == int(pwd):
return redirect('/list') #如果密码正确,则跳转到list页面,发生第二次请求
#如果返回的页面对应的def函数中没有类似数据库查询等操作,则使用return render
#若def函数涉及其他操作,则要用redirect
else:
print('登录失败')
return render(request,'login.html')

在小connect文件夹的urls.py中,写入

1
2
3
4
5
6
7
8
from django.contrib import admin
from django.conf.urls import include, url
from django.urls import path

urlpatterns = [
path('admin/', admin.site.urls),
path('', include('c.urls'))
]

在c文件夹中,创建一个urls.py文件,并写入

1
2
3
4
5
6
7
8
from django.urls import path
from . import views

urlpatterns = [
path('', views.index),
path('login/',views.login),
path('list/',views.list),
]

主项目里面的url负责分配url到不同的app里面,app里面的url块负责自己的路由选择

1
大概的流程图{在templates添加html文件在app下的view添加def  ...(request)return render(request,'...')在app下的urls中添加路径path['.../',views.....]}

现在输入python manage.py runserver即可访问页面

关于数据迁移,这部分是减轻程序员工作,在python中直接建表,并用python类型的操作集合(增删改查),但是在本项目中,只用from django.db import connection即可

在c文件夹中

向models.py文件添加

1
class Person(models.Model):    first_name = models.CharField(max_length=30)    last_name = models.CharField(max_length=30)

接着在终端输入

1
2
python manage.py makemigrations
python manage.py migrate

即可在navicat premium中的数据库中找到Person表