关于我的Django学习笔记

本文介绍了如何在Django框架中创建应用,包括models.py、views.py、admin.py的结构,以及MVC模式的应用。还涉及了数据库操作、URL路由、模板引擎、跨域请求配置、API接口调用和表单处理等内容。

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)

idbtitlebpub_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内容

-----模板文件

使用模板文件
  1. 加载模板文件
    去模板目录下面获取html文件的内容,得到一个模板对象

  2. 定义模板上下文
    向模版传递数据

  3. 模板渲染
    得到一个标准的html文件
    (渲染:把变量替换成对应的值)

  4. 返回给浏览器

(可向模板文件中传变量)

连接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
  1. 将corsheaders添加到你的Django项目的INSTALLED_APPS设置中,位于列表的最顶部:
INSTALLED_APPS = [
    'corsheaders',
    # ...其他应用...
]
  1. 在中间件MIDDLEWARE设置中添加corsheaders.middleware.CorsMiddleware,确保它被添加在CommonMiddleware之前:
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    # ...其他中间件...
]
  1. 在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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值