dgango创建应用
(django开发中一个功能模块用一个应用来实现)
每一个应用完成一个特定的功能
django项目创建命令:
django-admin startproject Django
创建一个应用命令:
python manege.py startapp 应用名
各个模块的功能
1.models.py:MVC中的M,写和数据库相关的内容
2.views.py:MVC中的V,接受请求,进行处理,与M和T进行交互,返回应答
定义处理函数
3.test.py:写测试代码的文件
4.admin.py:网站后台管理相关文件
实操
1.创建项目
2.开发某一功能时创建对应应用
3.建立应用和项目之间的关系:修改settings.py文件
INSTALLED_APPS中进行应用的注册在后面添加应用的名字
4.运行项目(检查项目是否创建成功)
项目运行命令:python manage.py runserver
Django框架
1.ORM框架
(django自带)
object:对象、类
Relation:关系,关系数据库中的表
Mapping:映射
举例:
‘’'type
class Bookinfo:
btitle 图书名称
tbpub_data 出版日期
‘’’
‘图书类’(object)
| id | btitle | bpub_data |
|---|---|---|
| (Relations)\ | ||
| 将类与关系表一一对应\ | ||
| == 通过类操作对应的表 ==(不需要写sql语句了) |
2.mvc框架
M:Model ,模型,和数据库进行交互
V:View视图,产生html页面
C:Controller,控制器,接受请求,进行处理,与M和V进行交互,
== (分工思想) ==
怎样在modles.py中设计模型类
后台管理(更改数据表)
admin.py (后台管理相关文件)
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
def __str__(self):
#返回书名
return self.btitle
#自定义模型类管理(包括要显示内容等)
class BookInfoAdmin(admin.ModelAdmin):
list_display = ['id','btitle','bpub_date']
#注册模型类
admin.site.register(BookInfo, BookInfoAdmin)
连接url与视图
(值得注意的是,在django并不是用过滤器)
view.py中设计好页面要返回什么样的内容,然后用urls.py与view.py进行连接(路由配置)
用正则表达式进行匹配,之后返回views中的函数中的HttpResponse对象
从上到下匹配每一个path,一匹配到就输出—>所以要严格匹配开头和结尾,防止匹配到其他
path(r'^index&', views.index, name = 'index'),
path(r'^index2&',views.index2, name = 'index2')
用模板显示html内容
-----模板文件
使用模板文件
-
加载模板文件
去模板目录下面获取html文件的内容,得到一个模板对象 -
定义模板上下文
向模版传递数据 -
模板渲染
得到一个标准的html文件
(渲染:把变量替换成对应的值) -
返回给浏览器
(可向模板文件中传变量)
连接ChatGlm
调取chatAPI接口
import requests
from django.http import JsonResponse
def chat_with_glm(request):
if 'GET' == request.method:
return JsonResponse({'error': 'Please use POST method.'}, status=405)
data = json.loads(request.body)
user_input = data['input']
# 调用ChatGLM的API
response = requests.post('http://localhost:8000/v1/chat', json={'content': user_input}, timeout=10).json()
glm_response = response['data']['answer']
return JsonResponse({'response': glm_response})
配置Django以允许跨域请求
(可能是django接入chatglm API的必要步骤)(如果两者运行在不同的域中)
所需库:django-cors-headers
pip install django-cors-headers
- 将corsheaders添加到你的Django项目的INSTALLED_APPS设置中,位于列表的最顶部:
INSTALLED_APPS = [
'corsheaders',
# ...其他应用...
]
- 在中间件MIDDLEWARE设置中添加corsheaders.middleware.CorsMiddleware,确保它被添加在CommonMiddleware之前:
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
# ...其他中间件...
]
- 在settings.py中配置跨域设置,允许所有源(注意:在生产环境中应该只允许信任的源):
CORS_ORIGIN_ALLOW_ALL = True
或者,更详细地控制哪些源被允许:
CORS_ORIGIN_WHITELIST = (
'http://example.com',
'https://sub.example.com',
'http://localhost:8000',
'http://127.0.0.1:9000'
)
确保你的CORS_ORIGIN_WHITELIST和CORS_ORIGIN_ALLOW_ALL设置不能同时为True。
完成以上步骤后,你的Django项目就应该能够接受并响应跨域请求了。
调用zhipuai的API接口
def send_message_to_chatglm(request,):
if request.method == 'POST':
value = request.POST.get('my_input', '') # 获取输入框的值
client = ZhipuAI(api_key="27b93707a8b9cbe24195275ad6539b7f.ZgPgA5DDAf8pVBLQ") # 填写您自己的APIKey
response = client.chat.completions.create(
model="glm-4", # 填写需要调用的模型名称
messages=[
# {"role": "user", "content": "作为一名营销专家,请为我的产品创作一个吸引人的slogan"},
# {"role": "assistant", "content": "当然,为了创作一个吸引人的slogan,请告诉我一些关于您产品的信息"},
# {"role": "user", "content": "智谱AI开放平台"},
# {"role": "assistant", "content": "智启未来,谱绘无限一智谱AI,让创新触手可及!"},
{"role": "user", "content": str(value)}
],
)
# return render(request, 'chat/chatt.html', {'mess': str(response.choices[0].message)})
# 处理value,例如存储到数据库或进行其他操作
# return HttpResponse(f"You entered: {value}")
return render(request, 'chat/en.html',{'v':str(response.choices[0].message)})
return render(request, 'chat/en.html',)
响应和请求
基本参数
例:
def show_books(request, ):
'''显示图书信息'''
# 1.通过M查找图书表中的数据
# 2.进行url配置,建立url地址和试图的对应关系
Books = BookInfo.objects.all()
return render(request, 'book/show_books.html',{'books':Books})
1.request
一个对象对象,封装了用户发过来的所有数据
2.return HttpResponse
返回一个请求
3.request.GET
在URL上传递值
4.request.POST
在请求体中提交数据
5.return redirect()
让浏览器重定向到其他页面
例:
return redirect("https://www.baidu.com")
创建表单(前端)
<form method="post" action="/login/" >
<input type="text" name="user" placeholder="用户名">
<input type="password" name="pwd" placeholder="密码">
<input type="submit" value="提交"/>
<span style="color: red;"> {{error_msg}}</span> #调整颜色
关于Forbidden(被禁止)问题的解决方式
== 这是django中为了防止csrf攻击而设置的功能 ==
<form method="post" action="/login/" >
{% csrf_token %} #解决方法
<input type="text" name="user" placeholder="用户名">
<input type="password" name="user" placeholder="密码">
<input type="submit" value="提交"/>
关于ORM具体操作(无法创建数据库,需自行创建)
1.自己创建数据库
cmd中输入命令行
2.操作表本身
1.创建表
在model.py中创建类
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=32)
age = models.IntegerField()
然后执行两条命令上交给MySQL
python manage.py makemigrations
python manage.py migrate
检测创建结果:
mysql> show tables;
+----------------------------+
| Tables_in_django_link |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| book_bookinfo |
| book_userinfo |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
12 rows in set (0.00 sec)
mysql> desc book_userInfo
-> ^C
mysql> desc book_userInfo;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | bigint | NO | PRI | NULL | auto_increment |
| name | varchar(32) | NO | | NULL | |
| password | varchar(32) | NO | | NULL | |
| age | int | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
2.删除表
直接将对应的模型类注释掉然后重新执行python manage.py migrate
3.修改表
(1) 删除列:在模型类中直接将想删除的列注释,然后重新执行python manage.py migrate
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=32)
# age = models.IntegerField()
(2) 添加列:需要注意此时表中有数据
需要在执行python manage.py migrate命令时新增默认值
class UserInfo(models.Model):
....................
age = models.IntegerField(default=0) #defoult:新增默认值
或设置列为空
class UserInfo(models.Model):
....................
age = models.IntegerField(null=True,blank=True) #null=True,blank=True设置为空
3.操作表中数据
以此表为示例进行操作:
class Department(models.Model):
title = models.CharField(max_length=16)
1.增加元素:
Department.objects.create(title="销售部")
2.删除元素:
Department.objects.filter(id=0).delete() #删除整行
Department.objects.all().delete() #删除所有
3.获取数据
# data_list = [对象,对象,对象] #QuerySet类型,和列表类似,每一行都是对象,封装了一行数据
data_list = Department.objects.all()
for obj in data_list:
print(obj.id, obj.title)
本文介绍了如何在Django框架中创建应用,包括models.py、views.py、admin.py的结构,以及MVC模式的应用。还涉及了数据库操作、URL路由、模板引擎、跨域请求配置、API接口调用和表单处理等内容。
1206

被折叠的 条评论
为什么被折叠?



