or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

admin.mdauth.mdcontrib.mddatabase-orm.mdforms.mdhttp.mdindex.mdmigrations.mdmypy-plugin.mdsignals.mdtemplates.mdtransactions.mdurls.mdviews.md

http.mddocs/

0

# HTTP Handling

1

2

Django's HTTP handling system provides comprehensive support for processing HTTP requests and generating responses, including request objects, response classes, middleware, and cookie management.

3

4

## Core Imports

5

6

```python

7

# HTTP request and response classes

8

from django.http import (

9

HttpRequest, HttpResponse, HttpResponseRedirect,

10

HttpResponsePermanentRedirect, HttpResponseNotModified,

11

HttpResponseBadRequest, HttpResponseNotFound,

12

HttpResponseForbidden, HttpResponseNotAllowed,

13

HttpResponseGone, HttpResponseServerError,

14

JsonResponse, StreamHttpResponse, FileResponse

15

)

16

17

# Query handling

18

from django.http import QueryDict

19

20

# File uploads

21

from django.core.files.uploadedfile import UploadedFile, TemporaryUploadedFile, InMemoryUploadedFile

22

23

# HTTP exceptions

24

from django.http import Http404, HttpResponseBadRequest

25

26

# Cookie handling

27

from django.http.cookie import SimpleCookie

28

29

# Utilities

30

from django.utils.datastructures import MultiValueDict

31

```

32

33

## Capabilities

34

35

### HTTP Request

36

37

Request object containing all information about the HTTP request from the client.

38

39

```python { .api }

40

class HttpRequest:

41

"""

42

HTTP request object containing client request data.

43

44

Attributes:

45

method (str): HTTP method (GET, POST, etc.)

46

path (str): Request path

47

path_info (str): Path info portion of URL

48

GET (QueryDict): GET parameters

49

POST (QueryDict): POST data

50

COOKIES (dict): Request cookies

51

FILES (MultiValueDict): Uploaded files

52

META (dict): Request metadata and headers

53

user: Authenticated user object

54

session: Session data

55

"""

56

method: str

57

path: str

58

path_info: str

59

GET: QueryDict

60

POST: QueryDict

61

COOKIES: dict

62

FILES: MultiValueDict

63

META: dict

64

user: Any

65

session: Any

66

67

def build_absolute_uri(self, location: str = None) -> str: ...

68

def get_full_path(self, force_append_slash: bool = False) -> str: ...

69

def get_full_path_info(self, force_append_slash: bool = False) -> str: ...

70

def get_host(self) -> str: ...

71

def get_port(self) -> str: ...

72

def get_raw_uri(self) -> str: ...

73

def get_signed_cookie(self, key: str, default=None, salt: str = '', max_age: int = None) -> str: ...

74

def is_secure(self) -> bool: ...

75

def is_ajax(self) -> bool: ...

76

def read(self, size: int = None) -> bytes: ...

77

def readline(self, size: int = None) -> bytes: ...

78

def readlines(self) -> list: ...

79

def xreadlines(self): ...

80

def __iter__(self): ...

81

```

82

83

### HTTP Response Classes

84

85

Response objects for returning data to the client with various content types and status codes.

86

87

```python { .api }

88

class HttpResponseBase:

89

"""Base HTTP response class."""

90

def __init__(self, content_type: str = None, status: int = None, reason: str = None, charset: str = None): ...

91

92

def __setitem__(self, header: str, value: str) -> None: ...

93

def __delitem__(self, header: str) -> None: ...

94

def __getitem__(self, header: str) -> str: ...

95

def has_header(self, header: str) -> bool: ...

96

def setdefault(self, header: str, value: str) -> str: ...

97

def set_cookie(self, key: str, value: str = '', max_age: int = None, expires=None,

98

path: str = '/', domain: str = None, secure: bool = False,

99

httponly: bool = False, samesite: str = None) -> None: ...

100

def set_signed_cookie(self, key: str, value: str, salt: str = '', **kwargs) -> None: ...

101

def delete_cookie(self, key: str, path: str = '/', domain: str = None, samesite: str = None) -> None: ...

102

def write(self, content) -> None: ...

103

def flush(self) -> None: ...

104

def tell(self) -> int: ...

105

def readable(self) -> bool: ...

106

def seekable(self) -> bool: ...

107

def writable(self) -> bool: ...

108

def writelines(self, lines) -> None: ...

109

110

status_code: int

111

reason_phrase: str

112

charset: str

113

streaming: bool

114

closed: bool

115

116

class HttpResponse(HttpResponseBase):

117

"""Standard HTTP response."""

118

def __init__(self, content=b'', content_type: str = None, status: int = 200, reason: str = None, charset: str = None): ...

119

120

content: bytes

121

122

class HttpResponseRedirect(HttpResponse):

123

"""HTTP redirect response (302)."""

124

status_code: int = 302

125

def __init__(self, redirect_to: str, *args, **kwargs): ...

126

url: str

127

128

class HttpResponsePermanentRedirect(HttpResponse):

129

"""HTTP permanent redirect response (301)."""

130

status_code: int = 301

131

def __init__(self, redirect_to: str, *args, **kwargs): ...

132

url: str

133

134

class HttpResponseNotModified(HttpResponse):

135

"""HTTP not modified response (304)."""

136

status_code: int = 304

137

def __init__(self, *args, **kwargs): ...

138

139

class HttpResponseBadRequest(HttpResponse):

140

"""HTTP bad request response (400)."""

141

status_code: int = 400

142

143

class HttpResponseNotFound(HttpResponse):

144

"""HTTP not found response (404)."""

145

status_code: int = 404

146

147

class HttpResponseForbidden(HttpResponse):

148

"""HTTP forbidden response (403)."""

149

status_code: int = 403

150

151

class HttpResponseNotAllowed(HttpResponse):

152

"""HTTP method not allowed response (405)."""

153

status_code: int = 405

154

def __init__(self, permitted_methods: list, *args, **kwargs): ...

155

156

class HttpResponseGone(HttpResponse):

157

"""HTTP gone response (410)."""

158

status_code: int = 410

159

160

class HttpResponseServerError(HttpResponse):

161

"""HTTP server error response (500)."""

162

status_code: int = 500

163

```

164

165

### Specialized Response Classes

166

167

Response classes for specific content types and use cases.

168

169

```python { .api }

170

class StreamingHttpResponse(HttpResponseBase):

171

"""HTTP response for streaming content."""

172

def __init__(self, streaming_content=(), content_type: str = 'text/html; charset=utf-8',

173

status: int = 200, reason: str = None, charset: str = None): ...

174

175

streaming_content: Any

176

streaming: bool = True

177

178

class FileResponse(StreamingHttpResponse):

179

"""HTTP response for serving files."""

180

def __init__(self, open_file, as_attachment: bool = False, filename: str = '',

181

content_type: str = None, **kwargs): ...

182

183

def set_headers(self, open_file) -> None: ...

184

185

class JsonResponse(HttpResponse):

186

"""HTTP response for JSON content."""

187

def __init__(self, data, encoder=None, safe: bool = True, json_dumps_params: dict = None, **kwargs): ...

188

```

189

190

### Query Parameters and Data

191

192

Classes for handling query parameters and form data.

193

194

```python { .api }

195

class QueryDict(MultiValueDict):

196

"""

197

Dictionary for handling query parameters and form data.

198

199

Supports multiple values per key and URL encoding/decoding.

200

"""

201

def __init__(self, query_string: str = None, mutable: bool = False, encoding: str = None): ...

202

203

def urlencode(self, safe: str = None) -> str: ...

204

def copy(self) -> QueryDict: ...

205

def __deepcopy__(self, memo: dict): ...

206

def __copy__(self): ...

207

def pop(self, key: str, default=None): ...

208

def popitem(self): ...

209

def clear(self) -> None: ...

210

def setdefault(self, key: str, default=None): ...

211

def update(self, other_dict) -> None: ...

212

```

213

214

### File Uploads

215

216

Classes for handling uploaded files and multipart form data.

217

218

```python { .api }

219

class MultiValueDict(dict):

220

"""Dictionary that can store multiple values for each key."""

221

def __init__(self, key_to_list_mapping=()): ...

222

223

def __getitem__(self, key: str): ...

224

def __setitem__(self, key: str, value) -> None: ...

225

def __copy__(self): ...

226

def __deepcopy__(self, memo: dict): ...

227

def get(self, key: str, default=None): ...

228

def getlist(self, key: str, default: list = None) -> list: ...

229

def setlist(self, key: str, list_: list) -> None: ...

230

def setlistdefault(self, key: str, default_list: list = None) -> list: ...

231

def appendlist(self, key: str, value) -> None: ...

232

def update(self, *args, **kwargs) -> None: ...

233

def pop(self, key: str, default=None): ...

234

def popitem(self): ...

235

def dict(self) -> dict: ...

236

def lists(self): ...

237

def values(self): ...

238

def items(self): ...

239

240

class UploadedFile:

241

"""Uploaded file wrapper."""

242

def __init__(self, file=None, name: str = None, content_type: str = None, size: int = None, charset: str = None, content_type_extra: dict = None): ...

243

244

def read(self, num_bytes: int = None) -> bytes: ...

245

def readline(self, length: int = None) -> bytes: ...

246

def readlines(self) -> list: ...

247

def chunks(self, chunk_size: int = None): ...

248

def multiple_chunks(self, chunk_size: int = None) -> bool: ...

249

def __iter__(self): ...

250

def open(self, mode: str = 'rb'): ...

251

def close(self) -> None: ...

252

253

name: str

254

size: int

255

content_type: str

256

content_type_extra: dict

257

charset: str

258

259

class InMemoryUploadedFile(UploadedFile):

260

"""Uploaded file stored in memory."""

261

def __init__(self, file, field_name: str, name: str, content_type: str, size: int, charset: str, content_type_extra: dict = None): ...

262

263

class TemporaryUploadedFile(UploadedFile):

264

"""Uploaded file stored in temporary file."""

265

def __init__(self, name: str, content_type: str, size: int, charset: str, content_type_extra: dict = None): ...

266

def temporary_file_path(self) -> str: ...

267

```

268

269

### HTTP Exceptions

270

271

Exception classes for HTTP error conditions.

272

273

```python { .api }

274

class Http404(Exception):

275

"""HTTP 404 Not Found exception."""

276

pass

277

278

class BadHeaderError(ValueError):

279

"""Invalid HTTP header error."""

280

pass

281

282

class RawPostDataException(Exception):

283

"""Exception for accessing raw POST data incorrectly."""

284

pass

285

286

class UnreadablePostError(OSError):

287

"""Exception for unreadable POST data."""

288

pass

289

```

290

291

### Cookie Handling

292

293

Utilities for HTTP cookie management and parsing.

294

295

```python { .api }

296

class SimpleCookie(dict):

297

"""Simple cookie implementation."""

298

def __init__(self, input: str = None): ...

299

def load(self, rawdata: str) -> None: ...

300

def output(self, attrs: list = None, header: str = "Set-Cookie:", sep: str = "\\r\\n") -> str: ...

301

def js_output(self, attrs: list = None) -> str: ...

302

def value_decode(self, val: str) -> tuple: ...

303

def value_encode(self, val) -> tuple: ...

304

305

def parse_cookie(cookie: str) -> dict:

306

"""Parse cookie string into dictionary."""

307

```

308

309

### HTTP Headers and Metadata

310

311

Utilities for handling HTTP headers and request metadata.

312

313

```python { .api }

314

class HttpHeaders(dict):

315

"""Case-insensitive HTTP headers dictionary."""

316

def __getitem__(self, key: str) -> str: ...

317

def __setitem__(self, key: str, value: str) -> None: ...

318

def __delitem__(self, key: str) -> None: ...

319

def __contains__(self, key: str) -> bool: ...

320

def get(self, key: str, default: str = None) -> str: ...

321

def keys(self): ...

322

def values(self): ...

323

def items(self): ...

324

325

def parse_header_parameters(header: str) -> tuple:

326

"""Parse header parameters into main value and parameters dict."""

327

328

def quote_etag(etag: str, weak: bool = False) -> str:

329

"""Quote ETag for HTTP headers."""

330

331

def unquote_etag(etag: str) -> tuple:

332

"""Unquote ETag from HTTP headers."""

333

334

def parse_etags(etag_str: str) -> list:

335

"""Parse multiple ETags from header."""

336

337

def quote(s: str, safe: str = '/') -> str:

338

"""URL quote string."""

339

340

def unquote(s: str) -> str:

341

"""URL unquote string."""

342

343

def unquote_plus(s: str) -> str:

344

"""URL unquote string with plus signs."""

345

```

346

347

### Content Types and Encoding

348

349

Utilities for handling content types and character encoding.

350

351

```python { .api }

352

def parse_accept_lang_header(lang_string: str) -> list:

353

"""Parse Accept-Language header."""

354

355

def get_content_charset_from_headers(headers: dict) -> str:

356

"""Extract charset from Content-Type header."""

357

358

def is_same_domain(host: str, pattern: str) -> bool:

359

"""Check if host matches domain pattern."""

360

361

def escape_uri_path(path: str) -> str:

362

"""Escape URI path for safe HTTP transmission."""

363

364

def http_date(epoch_seconds: float = None) -> str:

365

"""Format timestamp as HTTP date string."""

366

367

def parse_http_date(date: str) -> float:

368

"""Parse HTTP date string to timestamp."""

369

370

def conditional_content_removal(request: HttpRequest, response: HttpResponse) -> HttpResponse:

371

"""Remove content for conditional requests."""

372

```

373

374

### Request Processing

375

376

Utilities for processing and validating HTTP requests.

377

378

```python { .api }

379

def get_token(request: HttpRequest) -> str:

380

"""Get CSRF token from request."""

381

382

def same_origin(url1: str, url2: str) -> bool:

383

"""Check if two URLs have the same origin."""

384

385

def is_safe_url(url: str, allowed_hosts: set = None, require_https: bool = False) -> bool:

386

"""Check if URL is safe for redirects."""

387

388

def urlencode(query: dict, doseq: bool = False, safe: str = '', encoding: str = None, errors: str = None, quote_via=None) -> str:

389

"""Encode dictionary as URL query string."""

390

391

def urlencode_bytes(query: dict, doseq: bool = False) -> bytes:

392

"""Encode dictionary as URL query bytes."""

393

```

394

395

### Middleware Support

396

397

Base classes and utilities for HTTP middleware.

398

399

```python { .api }

400

class MiddlewareMixin:

401

"""Base mixin for middleware classes."""

402

def __init__(self, get_response=None): ...

403

def __call__(self, request: HttpRequest) -> HttpResponse: ...

404

405

def process_request(self, request: HttpRequest): ...

406

def process_view(self, request: HttpRequest, view_func, view_args: tuple, view_kwargs: dict): ...

407

def process_template_response(self, request: HttpRequest, response): ...

408

def process_response(self, request: HttpRequest, response: HttpResponse) -> HttpResponse: ...

409

def process_exception(self, request: HttpRequest, exception: Exception): ...

410

```